【发布时间】:2021-08-25 07:44:44
【问题描述】:
int __fastcall ListSortFunc1(void *Item1, void *Item2)
{
MyStruct *item1 = (MyStruct*)Item1;
MyStruct *item2 = (MyStruct*)Item2;
return (item1->string1 < item2->string1) ? (item1->string1 > item2->string1) :
StrToInt64(item1->number1) - StrToInt64(item2->number1);
}
看了网上的文档,不是很清楚Sort这个方法怎么用。
我需要重新排序两个或多个字段。目前,我必须重新排序一个文件,其中第一个字段是数字,第二个是日期,第三个是字符串,第四个仍然是字符串。
我用 Excel 和它报告的代码做了一些测试,但我得到了完全不同的结果。
谁能给我指路?
【问题讨论】:
-
当
(item1->string1 < item2->string1)为true时,(item1->string1 > item2->string1)必须为false。你为什么还要检查?您的return声明看起来有误。 -
我不检查返回值。不幸的是,我找不到详细解释 Sort () 方法使用的文档。
-
@David 然后你didn't look very hard
-
我建议不要这样做
StrToInt64(item1->number1) - StrToInt64(item2->number1)- 如果数字非常大,您可能会遇到算术溢出(您的大正数突然变为负数,因此排序行为不端)。不过,在大多数情况下,使用 int64 可能会侥幸成功。
标签: c++ c++builder