2012-04-20 36 views
34

我对C#没有太多的经验,我从PHP和关联数组中使用。在c#中处理关联数组的最简单方法是什么?

我看到在C#中是List类和原始数组,但我想在某个时刻关联一些字符串键。

处理这个问题的最简单方法是什么?

Thx!

+5

@Servy:只是鸡蛋里挑骨头的一些术语,** **不,这是一个**关联数组**。拉杜是正确的。 http://en.wikipedia.org/wiki/Associative_array。此外,还有很多种语言,其中数组没有被数字索引; JavaScript是一个。当我们批评术语时:**关联数组**不需要作为**哈希表**来实现。您将*抽象数据类型*与*实现细节*混淆。例如,一个关联数组可以通过平衡二叉树实现。 – 2012-04-20 16:57:53

+0

感谢Eric的澄清。 – Servy 2012-04-20 17:04:02

回答

61

使用Dictionary类。它应该做你需要的。 参考文献是here

所以,你可以做这样的事情:

IDictionary<string, int> dict = new Dictionary<string, int>(); 
dict["red"] = 10; 
dict["blue"] = 20; 
+2

了解字典不允许使用线性索引(除非这是键入它的方式),所以在上面的例子中,'dict [0]'(尝试获取字典的第一个元素)将不会被编译。你可以通过几种方法解决这个问题。最简单的方法是使用Linq逐个枚举字典的KeyValuePair对象。但是,订单不能保证(或者至少只能通过实现细节来保证)。 – KeithS 2012-04-20 17:03:28

+9

@KeithS然而,如果需要的功能是[OrderedDictionary](http://msdn.microsoft.com/en-us/library/system.collections.specialized.ordereddictionary.aspx)。 – Servy 2012-04-20 17:06:25

+1

完全正确,工作! – 2013-06-24 17:41:33

12

字典的工作,但.NET内置了关联数组一个实例是NameValueCollection类(System.Collections.Specialized.NameValueCollection)。

与字典相比略有优势是,如果您试图读取不存在的密钥,它将返回null而不是抛出异常。以下是设置值的两种方法。

NameValueCollection list = new NameValueCollection(); 
list["key1"] = "value1"; 

NameValueCollection list2 = new NameValueCollection() 
{ 
    { "key1", "value1" }, 
    { "key2", "value2" } 
}; 
相关问题