`

警惕TStringList.Sorted

阅读更多
万老师的博客里对TStringList这个类做了简明实用的描述,大家可以去看一下。
http://www.cnblogs.com/del/archive/2009/03/08/990040.html

而我写这个短篇的意图在于补充。
TStringList的Sorted属性是可以自动排序的,但是,它的排序是逐位比较的。
例子如下:
链表:
  aList:TStringList;
待输入字符串
  "0,100,1000,2000,10000"
你将Sorted属性置为true,然后直接用aList.commatext将字符串赋给aList
然后打印出来的结果是
  "0,100,1000,10000,2000"
将sorted设置为true再一个一个add上去,结果也是一样的。

因为TStringList自带的排序功能,都是按照字符串来比的,并没有判断数据类型,也没有尝试将按分隔符读取的字符串转换为整数。很粗糙的一个排序。

所以,千万不要用于数字字符串的排序!

/* 2010-03-01 */
今天碰到一个问题,我写的一个类中有个private的TStrings类型的FAgency。
然而我发现我给它赋一个TStrings类型的值后,再从它那里取值,经常会报找不到数据。
检查发现,由于是后来新增的,没有给它create,而且赋值时直接等过去,不对,应该使用addstrings函数来赋值。取值也是一样的。

像今天碰到的不创建就使用,并且直接将一个TStrings的值赋给它,除非你将一个常驻内存的TStrings赋给它,否则在访问内存时是一定会报错的。看来我的编程习惯还是不好,需要改进。。。
分享到:
评论

相关推荐

    TStringList数据排序程序

    StringList := TStringList.Create; try // 添加元素 StringList.Add('apple'); StringList.Add('banana'); StringList.Add('cherry'); // 使用Sort方法 StringList.Sort; // 此时,StringList的内容应为:...

    Delphi中-TStringList-的详细用法.doc

    List := TStringList.Create; List.Add('Strings1'); List.Add('Strings2'); List.Exchange(0,1); List.Insert(0,'Strings3'); i := List.IndexOf('Strings1'); List.Sort; List.Sorted := True; ...

    TStringList常用属性及方法

    List := TStringList.Create; ``` 这行代码创建了一个名为`List`的`TStringList`对象。 #### 三、添加与插入元素 - **添加元素**:使用`Add`方法可以将字符串添加到列表中。例如: ```pascal List.Add('Strings1...

    TStringslist.strings用法实例

    2. 修改字符串:同样通过索引,我们可以修改`TStringList`中的字符串内容,如`TStringList.Strings[1] := '新字符串'`将第二个字符串替换为"新字符串"。 3. 遍历字符串:可以使用for循环遍历所有字符串,例如: ```...

    TStringList.pdf

    从给定的文件信息来看,我们正在探讨的是一个名为`StringList`的类,它是在`.NET Framework`类库中定义的,具体位于`Microsoft.TeamFoundation.Build.Workflow.Activities`命名空间内。这个类实质上是对`System....

    delphi Memo及tstrlists的交集差集并集

    CommonItems := TStringList.Create; List1.Intersect(List2, CommonItems); // CommonItems 现在包含了 List1 和 List2 的交集 end; ``` 2. **差集(Difference)**:找出在第一个列表中存在的,但不在第二个...

    delphi中如何读取有逗号分割符数据

    sList:=TStringList.Create; sList.Text:=StringReplace(Astring,Dlmter,#13#10,[rfReplaceAll]); if (nPos>0) and (sList.Count>=nPos) then Result:=sList[nPos-1]; end; procedure TForm1.Button1Click(Sender:...

    Delphi中TStringList类使用详解

    List := TStringList.Create; ``` 使用完毕后,应当释放内存资源: ```delphi List.Free; ``` #### 添加与删除元素 `TStringList`支持通过`Add`方法向列表中添加元素: ```delphi List.Add('Strings1'); List.Add...

    Delphi中TStringList的用法_构造简单数据库.rar

    初始化时,可以设置其属性,如`StringList.Sorted := True`使其自动排序,或`StringList.Duplicates := dupIgnore`忽略重复项。 2. **添加字符串** 使用`Add`方法可以向TStringList中添加单个字符串,如`String...

    Delphi TStringList 排序代码.rar

    Delphi中的TStringList 排序算法实例代码,功能: 对保存在多个 TStringList 中的数据进行排序,支持按数字,日期,文字进行排序,支持顺序和倒序排序。  procedure MyStringsCustomSort(var aData: TSortData; ...

    delphi7如何读取excel文件

    List := TStringList.Create; Strs := TStringList.Create; // 创建一个 Excel 的 OLE 对象 ExcelApp := CreateOleObject('Excel.Application'); try // 打开一个 Excel 文件 ExcelApp.WorkBooks.Open(Edit1....

    DELPHI搜索文件的示例

    FileNamePathList := TStringList.Create; end; { if FileInUsed ('D:\Administrator\Documents\MyProjects\FileSearch\Win32\Debug\Project1.exe') then ShowMessage('File is in use.') else ShowMessage...

    通过TStringList分割字符串

    这里,我们将探讨如何使用`TStringList`类来分割由特定字符(如分号)隔开的字符串,并将结果在`TListView`组件中显示出来。这个过程在Delphi2009及其后续版本中是常见的操作,因为`TStringList`是Delphi标准库中的...

    Delphi遍历二叉树源代码..rar

    Result := TStringList.Create; if Node <> nil then begin Result.Add(Node.Value); // 访问根节点 Result += PreorderTraversal(Node.Left); // 遍历左子树 Result += PreorderTraversal(Node.Right); // ...

    mycomdelphi

    TmpPorts := TStringList.Create; try Index := 0; repeat ValueLen := 256; DataLen := 256; SetLength(ValueName, ValueLen); SetLength(Data, DataLen); ErrCode := RegEnumValue( KeyHandle, Index, ...

    delphi 网页浏览器

    historylist:=tstringlist.Create; speedbutton1.Enabled:=false; speedbutton3.Enabled:=false; listbox1.Visible:=false; if fileexists('net.ini') then begin assignfile(mytextfile,'net.ini'); reset...

    IDE Fix Pack for RAD Studio XE8 - Version 5.93 (2015-08-03)

    - Fixed: TStringList.IndexOfName optimization broke UniDAC's designtime editor - Fixed: "Find References" shortcut was assigned to "Find Local References" unless the search menu was opened - Added:...

    delphi字符串按字符串分割

    在这个例子中,`TStringList.Delimiter`属性被设置为分隔符,然后`TStringList.DelimitedText`属性被赋值为待分割的字符串,这将自动执行分割操作。之后,你可以遍历`TStringList`来访问每个分割后的子字符串。 ...

    delphi字符串分割函数整理

    strs := TStringList.Create; strs.CommaText := constr; for i := 0 to strs.Count - 1 do ShowMessage(strs[i]); end; ``` 在上面的代码示例中,首先定义了一个包含逗号分隔的字符串`constr`,然后创建了一个...

    delphi的Split实现方法

    Result := TStringList.Create; while Pos(s1, s) > 0 do begin PosStart := Pos(s1, s) - 1; Result.Add(Copy(s, 1, PosStart)); Delete(s, 1, PosStart + Length(s1)); end; Result.Add(s); end; ``` 在...

Global site tag (gtag.js) - Google Analytics