问一个低级问题,如何删除数组中的一个元素? (100分)

  • 主题发起人 主题发起人 bluecat
  • 开始时间 开始时间
B

bluecat

Unregistered / Unconfirmed
GUEST, unregistred user!
请赐教!
 
???
数组的元素是不可以删除的.只可以清空!
 
用链表还差不多
 
变通的方法:
再建立一个数组,把这个数组中没被删除的数据复制到新数组中。
 
说明白一点!
 
把数组后面的付值给前面就可以了
 
用循环把前一个数组的值赋给后一个数组。当然,你要删除的元素就不要了。
 
做个函数,将数组里的数据整理一次,好象你清空了第4个元素,就将4以后的数前移一位
 
建议你用个clientdataset来存你的数组元素,自己定义好字段类型。
当删除某一条纪录后,完全不必考虑前移后移的问题。
 
procedure DeleteItem(var aByteArray : array of Byte;
idx : Integer);
var
i : Integer;
begin
if idx in [Low(aByteArray)..High(aByteArray)] then
begin
for i := idx to High(aByteArray) - 1do
begin
aByteArray := aByteArray[i+1];
end;
end;
end;
 
确实无发直接减去,以下的方法是很笨的:
procedure TForm1.Button1Click(Sender: TObject);
var
myarray1,myarray2: array of char;
begin
setlength(myarray1,3);
myarray1[0]:='a';
myarray1[1]:='b';
myarray1[2]:='c';
setlength(myarray2,2);
myarray2[0]:=myarray1[1];
myarray2[1]:=myarray1[2];
end;
 
如果您的数组经常性的要进行插入、删除元素的操作,建议改用Delphi的TList——它对序列的操作进行了
良好的封装(Add Delete Count ...)
具体用法请参考: http://www.delphibbs.com/delphibbs/dispq.asp?lid=650664
(请注意 aimingoo 和 creation-zy 的对话)
 
没办法直接减去
 
用链表或TLIST是正道,TClientDataSet太低效。
 
看看数据结构的书吧!
上面都有现成的!
 
删除数组中一个元素就是将数组中该元素后面的元素依次往前移动, 如果是动态数组, 则移动完后再缩小数组的长度。例:
var
arr: array of Integer;
要删除第4个元素, 则:
move(arr[4], arr[3], sizeof(integer)*(high(arr)-3));
setlength(arr, high(arr));
 
var
list:tlist;
list.Delete(index);删除就行了,数组成员个数由tlist自动维护
 
接受答案了.
 
后退
顶部