請問一個陣列的問題 |
尚未結案
|
is90057
一般會員 發表:3 回覆:1 積分:0 註冊:2004-02-10 發送簡訊給我 |
|
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
轉貼自help的範例
var A: Variant; begin A := VarArrayCreate([0, 4], varVariant); A[0] := 1; A[1] := 1234.5678; A[2] := 'Hello world'; A[3] := True; A[4] := VarArrayOf([1, 10, 100, 1000]); WriteLn(A[2]); { Hello world } WriteLn(A[4][2]); { 100 } end;用variant似乎是個可行之道 |
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
補充一個 用tlist也是一種做法 在
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=49907 參與的討論中有寫了一段短短的code也很接近你的需求,不過已經不是用陣列解決了
procedure test(s: tlist); var i:integer; begin for i:=0 to s.count-1 do begin if tobject(s[i]) is tlabel then showmessage ('label'); if tobject(s[i]) is tbutton then showmessage ('button'); end; end; |
yachanga
資深會員 發表:24 回覆:335 積分:296 註冊:2003-09-27 發送簡訊給我 |
引言: 我設定一個動態的陣列SetLength(dynArray,49); 有時我們很難去估算陣列的大小,很可能造成不夠使用,一旦宣告太大,又會浪費許多寶貴的記憶體,想請問各位大大我要怎麼辦,當我遇到陣列的基底數不固定時要如何去設定? >>< face="Verdana, Arial, Helvetica"> Hi is90057: 參考william大大做法 看看是不是您要的type TMyReals = array of real; procedure test(var x: TMyReals; y:Integer); begin SetLength(x,10); end;以下為相關討論 http://delphi.ktop.com.tw/topic.php?topic_id=23024 http://delphi.ktop.com.tw/topic.php?topic_id=30503 http://delphi.ktop.com.tw/topic.php?topic_id=26756 http://delphi.ktop.com.tw/topic.php?topic_id=25062 發表人 - yachanga 於 2004/05/16 15:16:55 |
change.jian
版主 發表:29 回覆:620 積分:439 註冊:2003-06-02 發送簡訊給我 |
如果dynArray一開始設為49,並且對內容都給值了.當發現dynArray不夠大時,其實可以直接呼叫SetLength(dynArray,60),把陣列加到需要的大小(假設要60才夠),這時,原本在dynArray陣列內的前49個元素內的值並不會改變.當然,如果你要的功能複雜的話,建議用TList或TStringList會來得比較快,畢竟Delphi是OO的語言,既然已經有了TList/TStringList這類的陣列管理物件,何苦要自己寫呢?
底下的程式是加大陣列的sample,您可以測試看看:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons; type TForm1 = class(TForm) ListBox1: TListBox; BitBtn1: TBitBtn; BitBtn2: TBitBtn; procedure BitBtn1Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject); private aa:array of string; procedure ShowArrayData; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} { TForm1 } procedure TForm1.ShowArrayData; var i:Integer; begin ListBox1.Items.Clear; for i:=0 to high(aa) do ListBox1.Items.Add(aa[i]); end; procedure TForm1.BitBtn1Click(Sender: TObject); begin //第一次設定陣列大小為4 SetLength(aa,4); aa[0]:='0'; aa[1]:='1'; aa[2]:='2'; aa[3]:='3'; ShowArrayData; end; procedure TForm1.BitBtn2Click(Sender: TObject); begin //第一次設定陣列大小為8 SetLength(aa,8); aa[4]:='4'; aa[5]:='5'; aa[6]:='6'; aa[7]:='7'; ShowArrayData; end; end. |
thomas0728
中階會員 發表:112 回覆:260 積分:89 註冊:2002-03-12 發送簡訊給我 |
用一個新增一個元素,應該是最經濟實惠的方法
下面的方法試試 type
TMyReals = array of real; procedure test(var x: TMyReals; y:Integer);
begin
SetLength(TMyReals,1);
if need add array then
begin
j:=high(TMyReals)
SetLength(TMyReals,j 1);
end;
end; 如果愛情也有味覺
那麼 有沒有ㄧ種愛
微微泛酸 不太苦澀 有點甜密
嚐起來的滋味讓人想起幸福
Thomas Chiou
------
Thomas Chiou |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |