当前位置: 首页 > 编程语言 > C#

C#关联数组分享

时间:2023-04-11 01:27:34 C#

C#关联数组我一直在使用Hashtables,但是本质上,Hashtables是没有顺序的,我在添加的时候需要保持一切有序(因为我想把他们以相同的顺序将它们拉出)。例如,如果我这样做:pages["date"]=newFreeDateControl("Date:",false,true,false);pages["plaintiff"]=newFreeTextboxControl("PrimaryPlaintiff:",true,true,false);pages["loaned"]=newFreeTextboxControl("贷款金额:",true,true,false);pages["witness"]=newFreeTextboxControl("EKFGWitness:",true,true,false);当我做一个foreach时,我希望能够按以下顺序得到它:pages["date"]pages["plaintiff"]pages["loaned"]pages["witness"]我该怎么做?我相信.NET有OrderedDictionary类来处理这个问题。它不是通用的,但它可以作为一个不错的Hashtable替代品——如果你不关心严格的类型安全的话。我已经围绕这个类编写了一个通用包装器,我想分享一下。http://msdn.microsoft.com/en-us/library/system.collections.specialized.ordereddictionary.aspx编辑:LBushkin是正确的-OrderedDictionary看起来可以解决问题,尽管是以一种非通用的方式。有趣的是,有多少专门的集合没有通用的等价物:((对于Malfist来说,更改LBushkin接受的答案是有意义的。)(我认为......).NET没有内置任何东西。基本上你需要Keep一个列表和一个字典。添加到字典时,将键添加到列表中。然后您可以遍历列表并按插入顺序查找键。但是,在移除或更换物品时需要小心。在.NET4.0之前没有完美的解决方案。在<3.5中,您可以:使用具有整数键类型的通用SortedList,以及最常见的项目派生类型的值类型。定义一个整数值(比如i),当您将每个项目添加到SortedList时,只要您按下i++键,它的值就会递增。稍后,迭代排序列表的GetValueList属性。此IList属性将按照您放入的顺序生成对象,因为它们将按您使用的键进行排序。它并不快,但非常好且通用。如果您还想通过密钥访问,则需要执行其他操作,但我没有在您的要求中看到这一点。如果您不是通过键检索新的,并按键顺序添加项目,则实际上不必对集合进行排序,仅此而已。在.NET4.0中,您将拥有绝对适合您的通用SortedSetOfT。没有权衡取舍。使用排序列表我认为它会解决你的问题,因为SortedList对象在内部维护两个数组来存储列表的元素;也就是说,一个数组用于键,另一个数组用于关联值。每个元素都是键/值对,可以作为DictionaryEntry对象访问SortedListsl=newSortedList();foreach(DictionaryEntryxinsl){}使用KeyedCollection其底层基础是List,但提供了基于键的字典查找。在这种情况下,您的密钥是一个字符串。因此,只要您不两次添加相同的密钥就可以了。http://msdn.microsoft.com/en-us/library/ms132438.aspx正如Haxelit所建议的,您可能来自KeyedCollection。它实际上使用下面的列表,直到您达到某个阈值,然后它会同时保留列表和字典。如果您可以使用函数从值派生键,那么这是一个简单的解决方案。如果没有,那就一团糟了。最好的方法是使用C#索引器。它可以配置为我们喜欢的任何东西。我们可以传递int、enum、long、double或任何我们喜欢的东西。只需创建一个类并为其提供索引器并配置输入和输出参数即可。这有点多工作,但我认为这是唯一正确的方法。有关如何使用它的更多信息,请参阅此MSDN链接。请参阅索引器:http://msdn.microsoft.com/en-us/library/6x16t2tx.aspx另一种方法是将您有序的键值保存在像List这样的有序结构中,其余的仍然存储在字典中。然后,当您需要访问数据时,只需浏览排序列表并沿途查询字典即可。查看排序列表http://msdn.microsoft.com/en-us/library/system.collections.sortedlist.aspx以上是C#学习教程:C#关联数组分享的全部内容,如果对大家有用的话和需要了解更多C#学习教程,希望大家多多关注~本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: