如何使用方法在Delphi中对类TList进行排序

问题描述 投票:0回答:1

TList类的方法排序如何?此方法是否仅以列表元素仅上升/下降的方式排序?请看下面的代码。

Type 
  PInteger = ^Integer;
Function Compare(Item1, Item2 : Pointer) : Integer;
Begin
 if PInteger(Item1)^ > Pinteger(Item2)^ then Result:= 1
 else if PInteger(Item1)^ < PInteger(Item2)^ then Result:= -1
 else Result:= 0;

End;
 { And, for instance, somewhere we call the method }
 List.Sort(Compare);

现在的问题是,在编译代码之后,它运行良好,列表以元素提升的方式排序。但我不明白以下几行:

PInteger(item1)^ // What does this represent?

item1,item2指针指向什么?他们不需要初始化吗?

sorting delphi tlist
1个回答
3
投票

首先PInteger(item1)^做什么/代表什么?

  1. Item1Pointer,存储在TPointerList中的项目的地址。
  2. PInteger是一个类型化指针,这意味着该指针指向一个地址,在该地址中它应该找到一个整数(四个字节)。
  3. ^是解引用符号,您可以使用它与指针告诉编译器您要使用存储在指针当前指向的地址中的数据
  4. PInteger(item1)^你正在表演typecast。换句话说,你告诉编译器将指针Item1视为PInteger然后你取消引用它以使用它存储在地址Item1的数据/值

现在回到你的代码。您的函数需要从列表中指向Items(Integers)的两个指针,然后您比较存储在这些地址中的数据(通过解除引用)。这意味着列表负责给出函数的指针,实际上如果ItemCount小于1,则不会执行函数。

注意:您需要了解如果指针指向除整数之外的其他内容(或给出未定义的行为),此函数将失败。

© www.soinside.com 2019 - 2024. All rights reserved.