簡體   English   中英

c#元組列表多種排序

[英]c# tuple list multiple sort

我有一個三維元組數組:

var CountList = new List<Tuple<int, int, int>>();

所需的排序在第一個int上以數字方式遞增,然后在第二個int上以數字方式遞減,因此

5, 4, 7
4, 5, 6
5, 2, 3
3, 5, 2
2, 4, 1
2, 6, 4

2, 6 ,4
2, 4, 1
3, 5, 2
4, 5, 6
5, 4, 7
5, 2, 3

有沒有為Lis​​t.Sort()指定更多搜索功能的方法,或者我是否需要將信息拆分到單獨的列表,對每個組執行降序排序,然后將各個列表項添加到“主列表”中所需的升序?

您可以使用LINQ:

CountList = CountList
    .OrderBy(t => t.Item1)
    .ThenByDescending(t => t.Item2)
    .ToList();

使用List.Sort的不太容易理解但可能更有效的方法:

CountList.Sort(
(t1, t2) =>
{
    int res = t1.Item1.CompareTo(t2.Item1);
    return res != 0 ? res : t2.Item2.CompareTo(t1.Item2);
});

List.Sort對原始列表進行排序,而不是創建新列表。

您可以使用LINQ使用Enumerable.OrderByEnumerable.ThenByDescending

var Sorted = CountList.OrderBy(l=>l.Item1)
                      .ThenByDescending(l => l.Item2)
                      .ToList();

Sort有一個帶有Comparison參數的重載。

CountList.Sort((t1, t2) => {
        int c = t1.Item1.CompareTo(t2.Item1);
        if (c != 0) return c;
        c = t1.Item2.CompareTo(t2.Item2);
        return -c;
    }
);

你可以用

List<Tuple<int, int, int>> Sorted
  = CountList.OrderBy( iTuple => iTuple.Item1 )
             .ThenByDescending( iTuple => iTuple.Item2 )
             .ToList();

或實現自定義比較器以獲得字典順序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM