Record类型的数组如何删除元素?如何排序?(200分)

  • 主题发起人 主题发起人 MyDelphiPower
  • 开始时间 开始时间
M

MyDelphiPower

Unregistered / Unconfirmed
GUEST, unregistred user!
结构体如下:
TMyArray = record
Index:byte;
Item1 : string;
Item2 : string;
end;

定义一个数组:
MyArray :Array of TMyArray;

procedure TForm1.FormCreate(Sender: TObject);
begin
SetLength(myArray,4);
MyArray[0].Index:=2;
MyArray[0].Item1 := 'abc01';
MyArray[0].Item2 := 'abc02';

MyArray[0].Index:=1;
MyArray[1].Item1 := 'abc11';
MyArray[1].Item2 := 'abc12';

MyArray[0].Index:=4;
MyArray[2].Item1 := 'abc21';
MyArray[2].Item2 := 'abc22';

MyArray[0].Index:=3;
MyArray[3].Item1 := 'abc31';
MyArray[3].Item2 := 'abc32';

end;

procedure DeleteItem(iItem:integer);
var
i:integer;
begin
for i:=iItem to high(myArray)-1 do
begin
// 这里如何使用Move删除指定iItem的元素
Move(MyArray[i+1],myArray,....);
end;

SetLength(myArray,high(myArray));
end;


另外,如何根据TMyArray里的Index进行排序啊?
 
数组这种数据结构不适合做删除动作,建议将Array换成TList——它的删除和排序操作都
已经被封装,并且访问效率并不比数组低多少。

type
PMyArray=TMyArray^;
var
A:TList
P:PMyArray;
begin
New(P)
//申请内存块
P^.Index:=1;
...
A.Add(P)
//将内存块注册到List
New(P);
P^.item1:='abc';
...
A.Add(P);
end;

Dispose(A)
//释放指针对应内存块
A.Delete(i);
 
procedure DeleteItem(iItem:integer);
var
i:integer;
begin
for i:=iItem to high(myArray)-1 do
begin
// 这里如何使用Move删除指定iItem的元素
Move(MyArray[i+1],myArray,SizeOf(TMyArray));
end;

SetLength(myArray,总记录数-1);
end;
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
551
import
I
后退
顶部