2017-02-26 81 views
0

我有一本字典,它的關鍵字是一個字符串,並且該值是一個對象列表。我想根據2個因素對列表的大小和對象ID進行排序。值被排序,因此列表中的第一個元素始終是最低的ID。基於2個因素對字典進行排序

到目前爲止,我設法使用order by來按列表中元素的數量對它進行排序,但現在我很難根據其他因素進行排序。

例:字典X包含當前鍵/值

["A",{2,4,5,6}] 
["B",{6}] 
["C",{1}] 
["D",{0,1}] 
["E",{0,99,88,66}] 

排序應該是

["E",{0,99,88,66}] 
["A",{2,4,5,6}]  
["D",{0,1}] 
["C",{1}] 
["B",{6}] 

這裏後我有什麼:

Public MyObject{ 
    public Int Id{ get; set;} 
} 

var dictionary = new Dictionary<string, List<MyObject>>(); 
var dictionarySortedByCount = dictionary.OrderBy(x => x.Value.Count).Reverse().ToDictionary(x => x.Key, x => x.Value); 

任何幫助,將不勝感激。

+2

不要使用'Dictionary'進行排序,因爲字典的順序沒有排序。它針對查找鍵進行了優化。請將其存儲在「List」中。 –

+0

在OrderBy中,你可以使用任何你喜歡的邏輯,所以你可以把一個IComparable值的方法。但是,正如Jeroen提到的那樣,您可以通過將其放回Dictionary來銷燬您的訂單。這個類總是像現實生活字典一樣排序(因此它的名字) –

+0

爲什麼它會破壞字典的順序?我的聲明不會在那裏創建每個關鍵字按列表大小排序的新字典嗎? – ZZZ

回答

2

您是否嘗試在第一個像下面之後添加其他訂單條件?

var dictionarySortedByCount = dictionary 
     .OrderByDescending(x => x.Value.Count) 
     .ThenBy(x => x.Value[0].ObjectId) 
     .ToDictionary(x => x.Key, x => x.Value); 
+0

沒有,但我想嘗試這個 變種dictionarySortedByCount =字典 .OrderByDescending(X => x.Value.Count) .ThenBy(X => x.Value [0] .ObjectId) .ToDictionary(X => X .Key,x => x.Value); – ZZZ

+0

好奇......使用ObjectId進行排序的任何特定原因? –

+0

你是對的!我認爲第二個條件是字典鍵:第。如果它工作讓我知道,所以我可以編輯答案。 –

相關問題