我有以下问题:
我正在用一些值填充一个字典,并希望按照我填充它们的相同顺序将它们恢复.
不知怎的,它似乎没有用,当我遍历项目时,它们按非逻辑顺序(IMDO)排序.
运行以下程序后:
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils, System.Generics.Collections;
var
Dictionary: TDictionary<LongWord, string>;
aPair: TPair<LongWord, string>;
begin
Dictionary := TDictionary<LongWord, string>.Create;
Dictionary.add(1, 'First Item');
Dictionary.add(2, 'Second Item');
Dictionary.add(3, 'Third Item');
Dictionary.add(4, 'Forth Item');
Dictionary.add(5, 'Fifth Item');
Dictionary.add($FFFFFFFF, 'Longword Item');
for aPair in Dictionary do
writeln(aPair.Value);
readln;
end.
Run Code Online (Sandbox Code Playgroud)
我得到了以下结果:
Forth Item
Longword Item
First Item
Third Item
Second Item
Fifth Item
Run Code Online (Sandbox Code Playgroud)
难道我做错了什么?
在XE5和Rad Studio Berlin上测试,结果相同.
感谢帮助.
Delphi字典类是无序的.它的行为与设计一致.如果您希望维护订单,则需要使用有序数据结构.例如,数组或列表.
如果您希望有序访问以及O(1)查找,那么您需要串联维护两个集合.一个用于有序访问的数组或列表,以及用于O(1)查找的字典串联.或者,或者,找到提供有序字典实现的库.
| 归档时间: |
|
| 查看次数: |
211 次 |
| 最近记录: |