如何为C#字典中的多个键分配一个值?

c#

我想定义一个字母字典。在这本字典中,字符是键,每个字符都有一个值。我以最简单的方式编写了它,正如您所看到的,某些键具有相同的值。

var testDict = 
        new Dictionary <char, int>() { 
            {'A', 1}, {'E', 1}, {'I', 1}, 
            {'O', 1}, {'U', 1}, {'L', 1}, 
            {'N', 1}, {'R', 1}, {'S', 1}, 
            {'T', 1}, 
            {'D', 2}, {'G', 2},
            {'B', 3}, {'C', 3}, {'M', 3}, {'P', 3}, 
            {'F', 4}, {'H', 4}, {'V', 4}, {'W', 4}, {'Y', 4}, 
            {'K', 5}, 
            {'J', 8}, {'X', 8}, 
            {'Q',10}, {'Z',10}};

我需要找到其中的字母并使用指定的值。我怎样才能以更简洁的方式编写它?

回答

字典<TKEY的,TValue>中是键和值的集合。在这个集合中,每个键都映射到一个值。它已经在 System.Collection.Generics 命名空间中实现。

另一方面,有一个名为Lookup<TKey, TElement>的集合它表示键和值之间的一对多映射。即它将一个键映射到一个或多个值,并且它位于 System.Linq 命名空间中。

您可以转换任何在 System.Linq 命名空间中实现了IEnumerable接口和 ToLookup() 方法的集合以构造Lookup<TKey, TElement>集合。

在有关 C# 语言的 Microsoft 教程中阅读有关查找集合和字典的更多信息。

在这个问题中,我们可以考虑一个包含两个字段的包,一个句子中的“字母表”字符及其“计数”。

class Package
{
    public char Alphabet;
    public int Counts;
}

然后构造Lookup数据结构:

public static void LookupExample()
{
    // Create a dictionary of Packages to put into a Lookup data structure.
    var testDict = new Dictionary <char, int>() { 
         new Package { Alphabet = 'A', Counts = 1},
         new Package { Alphabet = 'B', Counts = 3},
         new Package { Alphabet = 'C', Counts = 3},
         new Package { Alphabet = 'D', Counts = 2},
         new Package { Alphabet = 'E', Counts = 1},
         new Package { Alphabet = 'F', Counts = 4},
         new Package { Alphabet = 'G', Counts = 2},
         new Package { Alphabet = 'H', Counts = 4},
         new Package { Alphabet = 'I', Counts = 1},
         new Package { Alphabet = 'J', Counts = 8},
         new Package { Alphabet = 'K', Counts = 5},
         new Package { Alphabet = 'L', Counts = 1},
         new Package { Alphabet = 'M', Counts = 3},
         new Package { Alphabet = 'N', Counts = 1},
         new Package { Alphabet = 'O', Counts = 1},
         new Package { Alphabet = 'P', Counts = 3},
         new Package { Alphabet = 'Q', Counts = 10},
         new Package { Alphabet = 'R', Counts = 1},
         new Package { Alphabet = 'S', Counts = 1},
         new Package { Alphabet = 'T', Counts = 1},
         new Package { Alphabet = 'U', Counts = 1},
         new Package { Alphabet = 'V', Counts = 4},
         new Package { Alphabet = 'W', Counts = 4},
         new Package { Alphabet = 'X', Counts = 8},
         new Package { Alphabet = 'Y', Counts = 4},
         new Package { Alphabet = 'Z', Counts = 10}};
                                                         

    // Create a Lookup to organize the packages. Use the Counts of each Alphabet as the key value.
    // Select Alpahbet appended to each Counts in the Lookup.
    Lookup<int, char> lookup = (Lookup<int, char>)testDict.ToLookup(p => p.Counts, p => p.Alphabet);

    // Iterate through each IGrouping in the Lookup and output the contents.
    foreach (IGrouping<int, char> packageGroup in lookup)
    {
        // Print the key value of the IGrouping.
        Console.WriteLine(packageGroup.Key);
        // Iterate through each value in the IGrouping and print its value.
        foreach (char chr in packageGroup)
            Console.WriteLine("    {0}", Convert.ToString(chr));
    }
 }

这有助于将“计数”视为新键并为其分配多个“字母”字符,这些字符的“计数”值具有相同的数量!


以上是如何为C#字典中的多个键分配一个值?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>