简单的文本排序问题(100)

  • 主题发起人 主题发起人 delhpi
  • 开始时间 开始时间
D

delhpi

Unregistered / Unconfirmed
GUEST, unregistred user!
假设某个TStringgrid里有2列,如下。现在要按照“姓名”列,分别升序和降序排序。因为姓名列的内容都是一样的,所以,我个人感觉,无论是升序还是降序,结果的顺序应该和初始的完全一致。如果你在EXCEL里编辑这2列,然后用菜单-数据-排序,结果的顺序和初始的完全一样。姓名 数字我 1我 2我 3我 4我 5我 6我 7我 8我 9我 10下面自己做了个类似的例子测试了一下,发现即使内容一样,位置也会变。//-------字符串排序 1function StrSort_1(List: TStringList; Index1, Index2: Integer): Integer;var Value1, Value2: Integer;begin Result := 0; try Result := -Comparestr(List[Index1], List[Index2]); except end;end;//-------字符串排序 2function StrSort_2(List: TStringList; Index1, Index2: Integer): Integer;var Value1, Value2: Integer;begin Result := 0; try Result := Comparestr(List[Index1], List[Index2]); except end;end;procedure TForm1.Button3Click(Sender: TObject);var i:Integer; StrList:TStringlist;begin strlist:=tstringlist.Create; try for i:=0 to 9 do strlist.Addobject('我',tobject(i));//下面排序一下后,strlist里的项目位置其实变了。 strlist.CustomSort(StrSort_1); for i:=0 to strlist.count-1 do memo1.lines.add(inttostr(integer(strlist.objects))); finally strlist.Free; end;end;
 
每个函数里用TRY太慢
 
现在不是慢的问题
 
用listview
 
来自:modula-2, 时间:2009-5-16 10:09:09, ID:3958634每个函数里用TRY太慢 ==怎么样改进一下呢?
 
不用问那么详细,只需说你需要排成什么样的stringlist的排序是二分法的,所以会打乱
 
呵呵,虽然没有看懂那个QUICKSORT,但还是感觉到似乎是二分法的缘故,因为我分析了排序后的数字列,发现10行数据分成了2部分,大致奇数,偶数2部分。要得结果就是因为姓名列的内容都是一样的,所以根据姓名列排序的话,无论是升序还是降序,结果的顺序应该和初始的完全一致。如果你在EXCEL里编辑这2列,然后用菜单-数据-排序,结果的顺序和初始的完全一样。现在看来用VCL内在的功能没法实现了,我自己写了一个procedure,虽然是山寨的,但是可以实现我的要求。还是利用TStringList,但是我把重复的值另外处理了,交给TStringlist排序的值都是不重复的。procedure SortText(Sg: TStringGrid; SortCol: Integer; IsDecrease: Boolean);
 
可否不用TRY呢,因为一个比较的函数不需要TRY
 
多人接受答案了。
 
后退
顶部