📜  C#中的SortedDictionary实现

📅  最后修改于: 2021-05-29 21:35:00             🧑  作者: Mango

在C#中,SortedDictionary是一个通用集合,用于以排序形式存储键/值对,并对键进行排序。 SortedDictionary在System.Collection.Generic命名空间下定义。它本质上是动态的,这意味着已排序字典的大小会根据需要而增加。

重要事项:

  • SortedDictionary类实现了
    • ICollection >接口
    • IDictionary 接口
    • IEnumerable >接口
    • IEnumerable 接口
    • IReadOnlyCollection >接口
    • IReadOnlyDictionary 接口
    • ICollection接口
    • 词典界面
    • IEnumerable接口
  • 在SortedDictionary中,键必须是唯一的。不允许重复的密钥。
  • 在SortedDictionary中,键是不可变的,不能为null。
  • 在SortedDictionary中,当值的类型是引用类型时,该值可以为null。
  • 它为未排序的数据提供最快的插入和删除操作。
  • 在SortedDictionary中,您只能存储相同类型的键/值对。
  • SortedDictionary的容量是SortedDictionary可以容纳的键/值对的数量。
  • 它按升序排序。

如何创建SortedDictionary?

SortedDictionary类具有4个用于创建SortedDictionary的构造函数,其构造函数如下:

  • SortedDictionary ():此构造函数用于创建SortedDictionary类的实例,该实例为空,并使用默认的IComparer实现作为键类型。
  • SortedDictionary (IComparer):此构造方法用于创建SortedDictionary类的实例,该实例为空,并使用指定的IComparer实现比较键。
  • SortedDictionary (IDictionary):此构造函数用于创建SortedDictionary类的实例,该实例包含从指定IDictionary复制的元素,并使用默认的IComparer实现作为键类型。
  • SortedDictionary (IDictionary,IComparer):此构造函数用于创建SortedDictionary类的实例,该实例包含从指定IDictionary复制的元素,并使用指定的IComparer实现比较键。

让我们看看如何使用SortedDictionary ()构造函数创建SortedDictionary:

步骤1:借助using关键字,在程序中包含System.Collection.Generics命名空间。

using System.Collection.Generics;

步骤2:使用SortedDictionary 类创建SortedDictionary,如下所示:

步骤3:如果要在SortedDictionary中添加元素,请使用Add()方法在SortedDictionary中添加键/值对。您还可以使用Collection Initializer在SortedDictionary中添加键/值对。

步骤4:使用foreach循环,使用索引值或使用for循环访问SortedDictionary的键/值对。

例子:

// C# program to illustrate how 
// to create sorted dictionary
using System;
using System.Collections.Generic;
  
class GFG {
  
    // Main Method
    static public void Main()
    {
  
        // Creating sorted dictionary
        // Using SortedDictionary class
        SortedDictionary My_sdict = 
            new SortedDictionary();
  
        // Adding key/value pair in Sorted 
        // Dictionary Using Add() method
        My_sdict.Add(004, "Ask.com");
        My_sdict.Add(003, "Yahoo");
        My_sdict.Add(001, "Google");
        My_sdict.Add(005, "AOL.com");
        My_sdict.Add(002, "Bing");
        Console.WriteLine("Top Search Engines:");
  
        // Accessing the key/value pair of the 
        // SortedDictionary Using foreach loop
        foreach(KeyValuePair pair in My_sdict)
        {
            Console.WriteLine("Rank: {0} and Name: {1}",
                                  pair.Key, pair.Value);
        }
  
        // Creating another sorted dictionary
        // using SortedDictionary class
        // adding key/value pairs
        // Using collection initializer
        SortedDictionary My_sdict1 = 
              new SortedDictionary() {
                                     {1, "Python"},
                                      {5, "Swift"},
                                 {2, "JavaScript"},
                                        {4, "Go" },
                                      {3, "Rust"}};
  
          
        Console.WriteLine("Top Programming Language in 2019: ");
  
        // Accessing the key/value pair of the 
        // SortedDictionary Using foreach loop
        foreach(KeyValuePair pair in My_sdict1)
        {
            Console.WriteLine("Rank:{0} and Name: {1}",
                                 pair.Key, pair.Value);
        }
    }
}
输出:
Top Search Engines:
Rank: 1 and Name: Google
Rank: 2 and Name: Bing
Rank: 3 and Name: Yahoo
Rank: 4 and Name: Ask.com
Rank: 5 and Name: AOL.com
Top Programming Language in 2019: 
Rank:1 and Name: Python
Rank:2 and Name: JavaScript
Rank:3 and Name: Rust
Rank:4 and Name: Go
Rank:5 and Name: Swift

如何从SortedDictionary中删除元素?

在SortedDictionary中,允许从SortedDictionary中删除元素。 SortedDictionary 类提供了两种不同的方法来删除元素,这些方法是:

  • Clear():此方法用于从SortedDictionary中删除所有元素。
  • Remove(TKey):此方法用于从SortedDictionary中删除具有指定键的元素。

例子:

// C# program to illustrate how to
// Remove key/value pair from the 
// SortedDictionary
using System;
using System.Collections.Generic;
  
class GFG {
  
    // Main Method
    static public void Main()
    {
  
        // Creating sorted dictionary
        // Using SortedDictionary class
        SortedDictionary My_sdict = 
             new SortedDictionary();
  
        // Adding key/value pair in 
        // SortedDictionary Using 
        // the Add() method
        My_sdict.Add(001, "Google");
        My_sdict.Add(002, "Bing");
        My_sdict.Add(003, "Yahoo");
        My_sdict.Add(004, "Ask.com");
        My_sdict.Add(005, "AOL.com");
  
        // Initial number of key/value pairs
        Console.WriteLine("Key/Value pair: {0}",
                                My_sdict.Count);
  
        // After using Remove(TKey) method
        My_sdict.Remove(002);
        Console.WriteLine("Key/Value pair: {0}",
                                My_sdict.Count);
  
        // After using Clear() method
        My_sdict.Clear();
        Console.WriteLine("Key/Value pair: {0}",
                                My_sdict.Count);
    }
}
输出:
Key/Value pair: 5
Key/Value pair: 4
Key/Value pair: 0

如何在SortedDictionary中检查键/值对的可用性?

在SortedDictionary中,您可以检查给定的键或值是否存在于指定的SortedDictionary中。 SortedDictionary 类提供了两种不同的检查方法,这些方法是:

  • ContainsKey(TKey):此方法用于确定SortedDictionary是否包含具有指定键的元素。
  • ContainsValue(TValue):此方法用于确定SortedDictionary是否包含具有指定值的元素。

例子:

// C# program to illustrate how to
// check the given key/value pair 
// is exists or not in SortedDictionary
using System;
using System.Collections.Generic;
  
class GFG {
  
    // Main Method
    static public void Main()
    {
  
        // Creating sorted dictionary
        // Using SortedDictionary class
        SortedDictionary My_sdict =
             new SortedDictionary();
  
        // Adding key/value pair 
        // in SortedDictionary
        // Using Add() method
        My_sdict.Add(001, "Google");
        My_sdict.Add(002, "Bing");
        My_sdict.Add(003, "Yahoo");
        My_sdict.Add(004, "Ask.com");
        My_sdict.Add(005, "AOL.com");
  
        // Using ContainsKey(TKey) method
        if (My_sdict.ContainsKey(004) == true) 
        {
            Console.WriteLine("Key Found..");
        }
        else
        {
            Console.WriteLine("Key Not Found..");
        }
  
        // Using ContainsValue(TValue) method
        if (My_sdict.ContainsValue("Baidu") == true)
        {
            Console.WriteLine("Value Found..");
        }
  
        else 
        {
            Console.WriteLine("Value Not Found..");
        }
    }
}
输出:
Key Found..
Value Not Found..