C#(086):字典Dictionary Tkey.TValue 与SortedList
一、概述
表示Key/Value集合,可以添加删除元素,允许按Key来访问元素。是Hashtable的泛型等效类。
它需要一个相等实现来确定键是否相等,可以使用实现了IEqualityComparer
二、声明及初始化
1、可带初始容量 Dictionary
Dictionary dic=new Dictionary();
2、带泛型接口:Dictionary
Dictionary
Dictionary dic = new Dictionary(StringComparer.CurrentCultureIgnoreCase);
三、常用方法
1、操作元素
添加\移除\清空键值对:
$1```
dic.Clear();
```csharp
$1```
bool hasKey = dic.ContainsKey("a");
bool hasValue = dic.ContainsValue("a1");
```csharp
$1```
```csharp
dic["a"] = "a2";
}
$1```
Console.Write(kvp.Value);
```csharp
KeyValuePair par = (KeyValuePair)shoplistcomboBox.SelectedItem;
Console.Write(key);
$1```
KeyValuePair par = (KeyValuePair)shoplistcomboBox.SelectedItem;
## 八、SortedList
可根据Key对集合中的元素进行自动排序。
```csharp
SortedDictionary sDictionary = new SortedDictionary();
sDictionary.Add(3, "cc");
sDictionary.Add(4, "dd");
sDictionary.Add(1, "aa");
sDictionary.Add(2, "bb"); // 此处可以发现sDictionary已经自动按key进行了排序
$1```
void Main()
{
List packages = new List { new Package { Company = "Coho Vineyard", Weight = 25.2, TrackingNumber = 89453312L },
new Package { Company = "Lucerne Publishing", Weight = 18.7, TrackingNumber = 89112755L },
new Package { Company = "Wingtip Toys", Weight = 6.0, TrackingNumber = 299456122L },
new Package { Company = "Contoso Pharmaceuticals", Weight = 9.3, TrackingNumber = 670053128L },
new Package { Company = "Wide World Importers", Weight = 33.8, TrackingNumber = 4665518773L } };
//KeySelector,elementSelector
Lookup lookup = (Lookup)packages.ToLookup(p => Convert.ToChar(p.Company.Substring(0, 1)), //Key允许有重复值
p => p.Company + " " + p.TrackingNumber);
foreach (IGrouping packageGroup in lookup)
{
Console.WriteLine(packageGroup.Key);
foreach (string str in packageGroup)
Console.WriteLine(" {0}", str);
}
//KeySelector
Lookup lookup2 = (Lookup)packages.ToLookup(p => Convert.ToChar(p.Company.Substring(0, 1)));
foreach (IGrouping packageGroup in lookup2)
{
Console.WriteLine(packageGroup.Key);
foreach (Package p in packageGroup)
Console.WriteLine(" {0}", p.Company + " " + p.TrackingNumber);
}
// 在Lookup根据索引查找元素
IEnumerable cgroup = lookup['C'];
foreach (string str in cgroup)
Console.WriteLine(str);
}
## 十、线程安全
ConcurrentDictionary