C#关联数组

Mal*_*ist 23 .net c# collections

我一直在使用Hashtable,但本质上,哈希表没有被排序,我需要在添加它们时保持一切顺序(因为我想以相同的顺序将它们拉出来).例如,如果我这样做:

pages["date"] = new FreeDateControl("Date:", false, true, false);
pages["plaintiff"] = new FreeTextboxControl("Primary Plaintiff:", true, true, false);
pages["loaned"] = new FreeTextboxControl("Amount Loaned:", true, true, false);
pages["witness"] = new FreeTextboxControl("EKFG Witness:", true, true, false);
Run Code Online (Sandbox Code Playgroud)

当我做一个foreach时,我希望能够按以下顺序得到它:

pages["date"]  
pages["plaintiff"]  
pages["loaned"]  
pages["witness"] 
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

LBu*_*kin 21

我相信.NET有OrderedDictionary类来处理这个问题.它不是通用的,但它可以作为一个体面的Hashtable替代品 - 如果你不关心严格的类型安全.

我已经写了一个关于这个类的通用包装器,我愿意分享.

http://msdn.microsoft.com/en-us/library/system.collections.specialized.ordereddictionary.aspx


Jon*_*eet 12

编辑:LBushkin是正确的 - OrderedDictionary看起来它的伎俩,虽然是非通用的方式.有趣的是,有多少专门的收藏品没有通用的等价物:((对于Malfist来说,改变LBushkin的接受答案是有意义的.)

(我认为......).NET没有任何内置功能.

基本上你需要保持一个List<string>以及一个Dictionary<string,FreeTextboxControl>.添加到字典时,将密钥添加到列表中.然后,您可以遍历列表并按插入顺序查找键.但是,当您移除或更换物品时,您需要小心.

  • @Malfist:`Dictionary <TKey,TValue>`可能看起来像是保持顺序,但不能保证.特别是,如果删除条目然后添加更多条目,则不会.如果你只是*添加条目,它往往会保持插入顺序IIRC - 但肯定不能保证. (3认同)
  • @Malfist:那不是真的.字典是一个哈希表,根本不会保持它们的顺序. (2认同)