如何对包含dictionary的字典进行排序

本文关键字:字典 排序 dictionary 包含 | 更新日期: 2023-09-27 18:16:30

我有一个字典,它包含另一个字典作为值像这样

Dictionary<string, Dictionary<double,double>> 

现在我想按内部字典的值排序我怎么能做到呢?

如何对包含dictionary的字典进行排序

从你的评论来看

对不起,我不是c#专家,你会建议一种方法来存储3个值作为一个项目吗?

我建议创建一个类并像这样对它进行排序

public class MyClass
{
    public string StringProperty {get;set;}
    public int FirstDoubleProperty {get;set;}
    public int SecondDoubleProperty {get;set;}
}

然后创建如下的集合

List<MyClass> MyClasscol = new List<MyClass>();
MyClass mc = new MyClass();
mc.StringProperty = "User1225072";
mc.FirstDoubleProperty = 5;
mc.SecondDoubleProperty = 6;
MyClasscol.Add(mc);
mc = new MyClass();
// and So on

然后像这样排序

var newsortedcollection = MyClasscol.OrderBy(x => x.FirstDoubleProperty);

假设您现在正试图弄清楚如何存储和排序具有多个属性的对象集合,那么您有几个选项。Nikhil Agrawal的答案是一个很好的解决方案,但有时你可能不需要/不想为此创建一个自定义类。对于这些情况(最好是当你的代码是私有的,而不是某些API的一部分),那么下面的替代方案可能是一个选择。

KeyValuePairs

根据您的要求和您最初使用字典的帖子,似乎不是字典的字典(多层),您可能想要一个键值对的字典(平面)。

// using keyvaluepair
var keyValueDict = new Dictionary<string, KeyValuePair<double, double>>();
keyValueDict.Add("string", new KeyValuePair<double, double>(5.8, 7.4));
var sortedKeyValues = keyValueDict.OrderBy(x => x.Value.Key);
元组

不那么令人愉快的KeyValuePair的另一种选择是。net 4中引入的元组。元组是一个泛型类,它允许您存储类型属性值,而无需创建自己的自定义类。值得注意的是,有多达8个属性的元组实现。

// using tuple
var tupleList = new List<Tuple<string, double, double>>();
tupleList.Add(new Tuple<string, double, double>("string", 5.8, 7.4));
var sortedTuples = tupleList.OrderBy(x => x.Item2);

如果你感兴趣的话,这里有一些关于元组的很好的SO问题:
在c#代码中使用。net 4.0元组是一个糟糕的设计决策吗?
现在我们有泛型了,还需要EventArg类吗