2013-06-02 45 views
0

我有一个包含另一个字典值 像这样如何排序包含字典的字典?

Dictionary<string, Dictionary<double,double>> 

现在我想通过内部字典的价值 我怎么能做到这一点对它进行排序的字典?

+2

我还没有去想象你为什么会需要这样的数据结构,但都有些什么您将持有的数据示例以及如何对数据进行排序?请记住,字典本身不可排序。 – gunr2171

+0

字典的某些价值和你想要对它们进行排序的依据会有所帮助。 –

+0

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

回答

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); 
+0

非常感谢你,这个作品很棒 – user1225072

1

假设你现在正试图弄清楚如何存储和ord呃具有多个属性的对象的集合,那么你有几个选择。 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); 

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

+0

很棒的信息,谢谢 – user1225072