得到一分钟。字典中的值

时间:2015-03-21 22:50:48

标签: c# linq sorting dictionary

具体细节:

我正在使用字典:

Dictionary<int, Tuple<int, Node>>;

为了简化,我们假设Node包含一个int值。

由此,我想按元组的Item1按升序对其进行排序,然后按Node对象中包含的值对关系进行排序(即值相同),这样两者中的值和节点值是排序后的第一个。

var sumList = from pair in openList
        orderby pair.Value.Item1 ascending
        select pair;

我完成了第一部分。我该如何更改,以便我也可以应用第二部分?

示例:

Node nod1 = new Node(1);
Node nod2 = new Node(2);
Node nod3 = new Node(3);
Node nod4 = new Node(4);

Dictionary.Add(3, nod1);
Dictionary.Add(3, nod4);
Dictionary.Add(2, nod2);
Dictionary.Add(2, nod3);

//result after sort
nod2
nod3
nod1
nod4

2 个答案:

答案 0 :(得分:1)

您可以使用ThenBy ...

var sumLists = openList
    .OrderBy(pair => pair.Value.Item1)
    .ThenBy(pair => pair.Value.Item2.NodeProperty);

答案 1 :(得分:-1)

我认为这会更容易通过表达式来实现,因为IQueryable<KeyValuePair<int, Node>>允许你执行这样的操作:

openList.OrderBy(c => c.Value.Item1)
    .ThenBy(c => c.Value.Item2.NodeValuePropToSortOn)

但是如果你需要使用查询语法,你可以这样做:

var sumList = from pair in openList
    orderby pair.Value.Item1 ascending, pair.Value.Item2.NodeValuePropToSortOn ascending
    select pair;

多个orderby属性被链接到OrderByThenBy