2012-04-20 37 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" } 
}; 
相關問題