1、头一次听过说从一个数组里删除另外一个数组,真新鲜!
阁下知道有一种数据结构叫链表么?
2、如果你实在要用数组,也有办法,而且不麻烦。因为您即没说原来的数组是动态的还是静态的,也没说您是知道要删除数据的标号还是内容,所以建议您以后提问题说明白一点,谢谢!
var
dynOld, dynNew: array of Integer;
buf, p: PInteger;//指针的类型要与 dynOld 的元素一样
i, cnt: Integer;
begin
...//你原来的动态数组 dynOld 内容假设已知
GetMem(buf, SizeOf(dynOld)*Length(dynOld));
p := buf;
cnt := 0;
for i := 0 to Length(dynOld) - 1 do
if 元素符合条件 then
begin
p^ := dynOld;
Inc(p);
Inc(cnt);
end;
SetLength(dynNew, Length(dynOld) - cnt);
Move(buf^, PChar(dynNew)^, SizeOf(dynNew)*Length(dynNew));
FreeMem(buf);
...//dynNew 中存储了过滤后的数据
end;
3、当然,中间可以不用 buf 倒一次,直接把符合条件的 dynOld 元素赋给 dynNew 就行了,但是后来还要把 dynNew 的长度用 SetLength 重新设定一下,我不知道这样会不会导致数据丢失,所以没用这种方法:
var
dynOld, dynNew: array of Integer;
i, cnt: Integer;
begin
...//你原来的动态数组 dynOld 内容假设已知
SetLength(dynNew, Length(dynOld));
cnt := 0;
for i := 0 to Length(dynOld) - 1 do
if 元素符合条件 then
begin
dynNew[cnt] := dynOld;
Inc(cnt);
end;
SetLength(dynNew, Length(dynOld) - cnt);
...//dynNew 中存储了过滤后的数据
end;