C#(086):字典Dictionary Tkey.TValue 与SortedList


一、概述

表示Key/Value集合,可以添加删除元素,允许按Key来访问元素。是Hashtable的泛型等效类。

它需要一个相等实现来确定键是否相等,可以使用实现了IEqualityComparer的构造函数;如果不指定,默认使用IEqualityComparer.Default。如果Tkey的类型实现了IEuatable,默认相等比较器则会使用该实现。

二、声明及初始化

1、可带初始容量 Dictionary dic=new Dictionary([Capacity])

    Dictionary dic=new Dictionary();

2、带泛型接口:Dictionary dic=new
Dictionary(IEqualityComparer comparer)

    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

相关