在C#中,字典(Dictionary)是一種特殊的集合,用於存儲鍵/值對。這是一種關聯數組,其中每個元素都包含一個鍵(Key)和一個值(Value)。 下麵是一個簡單的C#字典的例子: //字典:泛型;key - value,增刪查改 都很快; // 字典如果數據量太大的話,也會影響效率. // 字 ...
在C#中,字典(Dictionary)是一種特殊的集合,用於存儲鍵/值對。這是一種關聯數組,其中每個元素都包含一個鍵(Key)和一個值(Value)。
下麵是一個簡單的C#字典的例子:
//字典:泛型;key - value,增刪查改 都很快; // 字典如果數據量太大的話,也會影響效率. // 字典不是線程安全 ConcurrentDictionary Console.WriteLine("***************Dictionary******************"); Dictionary<int, string> dic = new Dictionary<int, string>(); dic.Add(1, "HaHa"); dic.Add(5, "HoHo"); dic.Add(3, "HeHe"); dic.Add(2, "HiHi"); dic.Add(4, "HuHu1"); dic[4] = "HuHu"; // 保存數據,key有就覆蓋 沒有就新增 dic.Add(4, "HuHu"); // 如果存在會異常 var value= dic[4]; //獲取數據 沒有會異常的 var result = dic.ContainsKey(4); // 檢查是否存在 foreach (var item in dic) { Console.WriteLine($"Key:{item.Key}, Value:{item.Value}"); } //for (int i = 0; i < dic.Count; i++) //{ // var value1 = dic[4]; // Console.WriteLine($"Key:{value1}, Value:{dic[i]}"); //} // 取值 // 定義 Dictionary<string, string> dictExecutes = new Dictionary<string, string>(); // 添加元素 dictExecutes.Add("bmp", "paint.exe"); dictExecutes.Add("dib", "paint.exe"); dictExecutes.Add("rtf", "wordpad.exe"); dictExecutes.Add("txt", "notepad.exe"); // 取值 Console.WriteLine("For key = 'rtf', value = {0}.", dictExecutes["rtf"]); // 改值 dictExecutes["rtf"] = "winword.exe"; Console.WriteLine("For key = 'rtf', value = {0}.", dictExecutes["rtf"]); // 遍歷 KEY foreach (string key in dictExecutes.Keys) Console.WriteLine("Key = {0}", key); // 遍歷 VALUE foreach (string item in dictExecutes.Values) Console.WriteLine("value = {0}", value); // 遍歷字典 foreach (KeyValuePair<string, string> kvp in dictExecutes) { Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value); if (kvp.Value == "paint.exe") dictExecutes[kvp.Key] = "zhy.exe"; } // 添加存在的元素 try { dictExecutes.Add("txt", "winword.exe"); } catch (ArgumentException) { Console.WriteLine("An element with Key = 'txt' already exists."); } // 刪除元素 dictExecutes.Remove("doc"); // 沒有不會異常 if (!dictExecutes.ContainsKey("doc")) Console.WriteLine("Key 'doc' is not found."); // 判斷鍵存在 if (dictExecutes.ContainsKey("bmp")) Console.WriteLine("An element with Key = 'bmp' exists.");
ConcurrentDictionary
是.NET框架中的一個類,它提供了一種線程安全的方式來存儲鍵值對。這意味著多個線程可以同時訪問和修改ConcurrentDictionary
,而不會導致數據競爭或其他併發問題。
以下是一些基本的使用例子:
// 創建一個新的 ConcurrentDictionary 實例 var dictionary = new ConcurrentDictionary<string, int>(); // 向字典中添加一些元素 dictionary.TryAdd("One", 1); dictionary.TryAdd("Two", 2); dictionary.TryAdd("Three", 3); // 嘗試獲取一個元素 if (dictionary.ContainsKey("Two")) { Console.WriteLine($"Value for 'Two': {dictionary["Two"]}"); } else { Console.WriteLine("Key 'Two' not found."); } // 嘗試修改一個元素 dictionary["Two"] = 22; // 遍歷字典中的所有元素 foreach (var pair in dictionary) { Console.WriteLine($"Key: {pair.Key}, Value: {pair.Value}"); } // 刪除一個元素 int value; var sucdess = dictionary.TryRemove("Two", out value); if (sucdess) { Console.WriteLine($"Removed key: {value}"); } else { Console.WriteLine("Key not found."); }
ConcurrentDictionary提供了比普通的
Dictionary更安全的併發操作。普通的
Dictionary在多線程環境下可能會遇到數據競爭和其他併發問題,因為它的內部實現並不是線程安全的。然而,
ConcurrentDictionary`的設計使得在多線程環境下的操作是線程安全的,它使用了高效的併發控制機制來保護其內部數據結構。