根据2个因素对字典进行排序

时间:2017-02-26 13:05:31

标签: c# linq sorting dictionary compareto

我有一个字典,它的键是一个字符串,值是一个对象列表。我想根据2个因素,列表的大小和对象Id对其键进行排序。这些值已排序,因此列表中的第一个元素始终是最低的id。

到目前为止,我设法使用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);

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

您是否尝试在第一个订单条件之后添加另一个订单条件,如下所示?

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