具有多个值的 C# 顺序字典键

J. *_*ary 1 .net c#

我在 C# 中创建了一个字典,每个键有多个值:

编辑:根据评论的建议,结构已得到纠正:

var exampleDictionary = new Dictionary<string, Dictionary<string, double>>() 
{ 
    { 
        "Apple", 
            new Dictionary<string, double> 
            { 
                { "Weight", 82 }, 
                {"Size", 10}, 
                { "Number", 32 } 
            } 
    }, 
    { 
        "Orange", 
            new Dictionary<string, double> 
            { 
                { "Weight", 73 }, 
                {"Size", 9}, 
                { "Number", 63 } 
            } 
    }, 
};
Run Code Online (Sandbox Code Playgroud)

有没有办法可以按特定值对字典键进行排序。例如,如果我想按降序按“数字”值排序,那么字典将先有橙色,然后是苹果。

Kla*_*ter 5

使用 LINQ 最容易做到这一点:

exampleDictionary.OrderByDescending(e => e.Value["Number"])
Run Code Online (Sandbox Code Playgroud)

如果不能保证“Number”条目存在,最好使用 TryGetValue 而不是[..]避免 KeyNotFoundException:

exampleDictionary.OrderByDescending(e => e.Value.TryGetValue("Number", out var n) ? n : 0)
Run Code Online (Sandbox Code Playgroud)

(这将对没有数字的条目进行排序,就像数字是 0 一样)。

正如一些评论指出的那样:OrderByDescending 不会就地对字典进行排序(这是不可能的),而是返回一个有序的可枚举,因此它可以用作例如:

foreach (var entry in exampleDictionary.OrderByDescending(e => e.Value["Number"]))
{
   Console.WriteLine(entry.Key);
}
Run Code Online (Sandbox Code Playgroud)