陣列內值的刪除 |
尚未結案
|
beta
一般會員 發表:7 回覆:11 積分:3 註冊:2003-01-03 發送簡訊給我 |
Ex:
procedure setarray;
var myarray,temparray:Array Of integer;
i:integer;
begin
Setlength(MyAarray,4);
SetLength(TempArray,3);
For i:=0 to 3 do
begin
myarray[I]=i 1;
end; 若我不想要MyArray[2]的值
然後把我要的其他值指定給TempArray=(1,2,4)
請教各位前輩有這種Function嗎(刪除陣列中某一值)?
還是我要用loop將值篩選後加入TempArray?? 感謝各位!!
|
jest0024
高階會員 發表:11 回覆:310 積分:224 註冊:2002-11-24 發送簡訊給我 |
引言: Ex: procedure setarray; var myarray,temparray:Array Of integer; i:integer; begin Setlength(MyAarray,4); SetLength(TempArray,3); For i:=0 to 3 do begin myarray[I]=i 1; end; 若我不想要MyArray[2]的值 然後把我要的其他值指定給TempArray=(1,2,4) 請教各位前輩有這種Function嗎(刪除陣列中某一值)? 還是我要用loop將值篩選後加入TempArray?? 感謝各位!!CopyMemory(@TempArray[0],@MyArray[0],Index*Sizeof(Integer)); CopyMemory(@TempArray[Index],@MyArray[Index 1],(Len-Index-1)*Sizeof(Integer)); |
beta
一般會員 發表:7 回覆:11 積分:3 註冊:2003-01-03 發送簡訊給我 |
以下是我試的結果: procedure TForm1.Button1Click(Sender: TObject);
var AA,BB:array of integer;
I:integer;
begin
Setlength(AA,4);
Setlength(BB,3);
For I:=0 to 3 do
Begin
AA[I]:=(I 1)*10;
end;
CopyMemory(@bb[0],@aa[1],(length(aa)-0-1)*Sizeof(Integer));
For i:=0 to 2 do
Begin
ShowMessage(IntToStr(bb[i]));
end;
這個Function不管怎麼怎麼做,似乎不能直接達到我要的目的。
[1,2,3,4]要變成[1,3,4] 還是必須透過loop來完成,如有說錯請各位指教。
|
mustapha.wang
資深會員 發表:89 回覆:409 積分:274 註冊:2002-03-13 發送簡訊給我 |
分两次复制。(用loop更直观,没有多少忧劣之分)
procedure TForm1.Button1Click(Sender: TObject); const DeleteIndex=1; var AA,BB:array of integer; I:integer; begin Setlength(AA,4); Setlength(BB,3); For I:=0 to 3 do Begin AA[I]:=(I+1)*10; end; if DeleteIndex>0 then Move(aa[0],bb[0],DeleteIndex*Sizeof(Integer)); Move(aa[DeleteIndex+1],bb[DeleteIndex],(Length(bb)-1)*Sizeof(Integer)); For i:=0 to 2 do Begin ShowMessage(IntToStr(bb[i])); end; end;久病成良医--多试 千人之诺诺,不如一士之谔谔--兼听
------
江上何人初见月,江月何年初照人 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |