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

时间:2013-06-02 01:03:13

标签: c# .net

我有一个字典,其中包含另一个字典作为值 像这样的东西

Dictionary<string, Dictionary<double,double>> 

现在我想按内部字典的值对其进行排序 我怎么能这样做?

2 个答案:

答案 0 :(得分:4)

从评论的外观

  

抱歉,我不是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);

答案 1 :(得分:1)

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

<强> KeyValuePairs

根据您的要求和使用词典的原始帖子,似乎不是字典词典(多层),您可能想要一个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);

如果你有兴趣,有一些关于元组的好问题:
Is Using .NET 4.0 Tuples in my C# Code a Poor Design Decision?
Are EventArg classes needed now that we have generics