2013-06-02 89 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