在 C# 中处理关联数组的最简单方法是啥?

Posted

技术标签:

【中文标题】在 C# 中处理关联数组的最简单方法是啥?【英文标题】:What is the easiest way to handle associative array in c#?在 C# 中处理关联数组的最简单方法是什么? 【发布时间】:2012-05-02 06:36:31 【问题描述】:

我在 C# 方面没有太多经验,但我习惯于在 php 中使用关联数组。

我看到在 C# 中可以使用 List 类和 Array,但我想关联一些字符串键。

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

谢谢!

【问题讨论】:

@Servy:只是挑剔一些术语,no,这是一个关联数组。拉杜是正确的。 en.wikipedia.org/wiki/Associative_array。此外,有许多语言中的数组不按数字索引。 javascript 就是其中之一。虽然我们在批评术语:关联数组不需要实现为哈希表。您将抽象数据类型与其实现细节混淆了。例如,关联数组可以通过平衡二叉树来实现。 感谢 Eric 的澄清。 【参考方案1】:

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

所以你可以这样做:

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

【讨论】:

理解字典不允许线性索引(除非你是这样键入的),所以在上面的例子中,dict[0](试图获取字典的第一个元素)不会编译。您可以通过多种方式解决此问题;最简单的方法是使用 Linq 一次枚举 Dictionary 的 KeyValuePair 对象。但是,不能保证顺序(或者至少只能通过实现细节来保证)。 @KeithS 但是有一个OrderedDictionary 如果这是必需的功能。 @KeithS - FWIW,重新“至少它只能通过实现细节来保证” - 实际上,如果你 delete 项目,甚至不是这样,并且然后添加更多项目 - 不再按顺序排列。【参考方案2】:

可以使用字典,但 .NET 内置了关联数组。一个实例是 NameValueCollection 类 (System.Collections.Specialized.NameValueCollection)。

相对于字典的一点优势是,如果您尝试读取一个不存在的键,它会返回 null 而不是抛出异常。下面是两种设置值的方法。

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

NameValueCollection list2 = new NameValueCollection()

     "key1", "value1" ,
     "key2", "value2" 
;

【讨论】:

NameValueCollection 本质上是一个字典,键和值都限制为字符串。恕我直言,最好学习使用Dictionary&lt;TKey, TValue&gt;,因为这样您就可以将它用于字符串和其他对象。说“字典可以工作,但 .NET 内置了关联数组”——暗示Dictionary 不是关联数组——是荒谬的。 Dictionary 与 NameValueCollection 一样是关联数组。

以上是关于在 C# 中处理关联数组的最简单方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在delphi中从数组数据中播放声音的最简单方法是啥

使用 C#,将包含二进制数据的字符串转换为字节数组的最有效方法是啥

打印 Java 数组的最简单方法是啥?

在 C# 中比较数组的最简单方法

C# 中的多维关联数组

非关联数组的术语是啥?