![]() |
1
35
可以将指向数组元素的指针添加到
但是,如果您使用的是下一个版本D2009,那么有一个新的集合库可以对数组进行排序。它需要一个可选的
|
![]() |
2
12
(我知道这是一年后的事,但仍然有用。) skamradt关于填充整数值的建议假定您将使用字符串比较进行排序。这会很慢。为每个插入调用format(),速度仍然较慢。相反,您需要进行整数比较。 从记录类型开始:
您没有说明记录是如何存储的,或者您希望在排序后如何访问它们。所以假设您将它们放入动态数组中:
现在您要按整数值sortorder对这个数组进行排序。如果您想要的是一个tstringlist(这样您就可以使用ts.find方法),那么您应该将每个字符串添加到列表中,并将sortorder作为指针添加。然后按指针排序:
注意将整数sortOrder转换为存储在tstringlist.object属性中的tobject指针的技巧。(这取决于整数和指针大小相同的事实。)在某些地方,我们必须定义一个函数来比较tobject指针:
现在,我们可以通过调用.customsort而不是.sort(它将根据字符串值排序)对.object上的tslist进行排序。
tstringlist现在已经排序,所以您可以从0迭代到.count-1并按排序顺序读取字符串。 但是假设您不想要一个tstringlist,只需要一个按顺序排列的数组。或者记录包含的数据比本例中的一个字符串多,排序顺序也更复杂。您可以跳过添加每个字符串的步骤,只需将数组索引添加为tlist中的项。除使用tlist而不是tstringlist外,其他所有操作都以相同的方式执行:
现在,MList已排序,请将其用作查找表,以按排序顺序访问数组:
当我遍历tlist时,我们按排序顺序返回数组索引。我们只需要将它们转换回整数,因为tlist认为它们是指针。 我喜欢这样做,但是您也可以通过添加数组元素的地址而不是它的索引来将数组元素的实际指针放在tlist中。然后要使用它们,您可以将它们作为指向Texample记录的指针。这就是巴里·凯利和酷魔在回答问题时所说的。 |
![]() |
3
3
如果需要按字符串排序,则使用排序
但如果需要按整型字段和字符串排序,请使用
|
![]() |
4
2
这完全取决于您正在排序的记录的数量。如果您的排序少于几百个,那么其他排序方法工作得很好,如果您打算进行更多的排序,那么就好好看看以前值得信赖的涡轮动力。 SysTools 项目。源代码中包含一个非常好的排序算法。以一种有效的方式对数以百万计的记录进行分类的人。 如果要使用tstringlist方法对记录列表进行排序,请确保在将整数插入列表之前将其填充到右侧。你可以使用 格式(“%.10d”,[rec.sortorder]) 例如,右对齐到10位。 |
![]() |
5
1
快速排序算法通常在需要快速排序时使用。Delphi正在(或曾经)使用它作为列表。例如排序。 DelphiList可以用于对任何内容进行排序,但它是一个重量级容器,应该看起来像结构上的指针数组。它是重量级的,即使我们在这个线程中使用像guy gordon这样的技巧(把索引或任何东西放在指针的位置上,或者直接把值放在小于32位的位置上):我们需要构造一个列表等等… 因此,对结构数组进行轻松快速排序的另一种方法可能是使用 qsort C runtime function 从msvcrt.dll。 下面是一个可能很好的声明(警告:代码只能在Windows上移植)。
完整例子 here . 请注意,如果记录很大,直接对记录数组排序可能会很慢。在这种情况下,对指向记录的指针数组进行排序可以更快(以某种方式类似于列表方法)。 |
![]() |
6
1
对于一个数组,我会使用
基于C的例程,这里有几个 http://www.yendor.com/programming/sort/ 另一个站点,但有Pascal源 http://www.dcc.uchile.cl/~rbaeza/handbook/sort_a.html |
![]() |
7
0
使用一种建议方式 Wikipedia . swap函数应使用与数组元素类型相同的临时变量交换数组元素。如果您希望具有相同sortOrder整数值的条目保持其最初的顺序,请使用稳定排序。 |
![]() |
8
0
注意:为了提高速度,请在“未排序”中添加对象
当做。 |
![]() |
9
0
如果您有Delphi XE2或更新版本,可以尝试:
|
![]() |
10
-1
我创建了一个非常简单的示例,如果排序字段是一个字符串,它就可以正常工作。
|
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 3 月前 |
![]() |
bairog · 从按属性筛选的对象数组字典中创建值数组 3 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 3 月前 |
![]() |
Geremia · 2D NumPy数组+1D数组? 4 月前 |
![]() |
MARTIN · 交换第一个和最后一个单词,反转所有中间的字符 5 月前 |
![]() |
Paul Williams · 迭代数组时输出有问题 5 月前 |