C# 如何对列表进行排序<;元组<;T1、T2、T3>&燃气轮机;通过T1和T3上升

C# 如何对列表进行排序<;元组<;T1、T2、T3>&燃气轮机;通过T1和T3上升,c#,.net,list,sorting,tuples,C#,.net,List,Sorting,Tuples,我想按T1和T3升序对以下三元组列表进行排序: var datalist= new List<Tuple<long, string, string>>(); 使用OrderBy和ThenBy组合: var result = datalist.OrderBy(x => x.Item1).ThenBy(x => x.Item3); 你可以用Linq来解决这个问题。首先添加名称空间: using System.Linq; 然后使用和,对于样本: var res

我想按T1和T3升序对以下三元组列表进行排序:

var datalist= new List<Tuple<long, string, string>>();

使用
OrderBy
ThenBy
组合:

var result = datalist.OrderBy(x => x.Item1).ThenBy(x => x.Item3);

你可以用Linq来解决这个问题。首先添加名称空间:

using System.Linq;
然后使用和,对于样本:

var result = datalist.OrderBy(x => x.Item1).ThenBy(x => x.Item3);
如果需要按降序排序,还可以查看和

您可以根据需要调用OrderBy和许多TheBy。

您可以使用
System.Linq的
OrderBy()
ThenBy()
函数

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
    public static void Main()
    {
        var datalist= new List<Tuple<long, string, string>>();
        datalist.Add(new Tuple<long, string, string>(123123, "xxx", "zz"));
        datalist.Add(new Tuple<long, string, string>(444555, "ybc", "bb"));
        datalist.Add(new Tuple<long, string, string>(444555, "abc", "aa"));
        datalist = datalist.OrderBy(x => x.Item1).ThenBy(x => x.Item3).ToList();
        foreach(var data in datalist)
        {
            Console.WriteLine("{0} {1} {2}", data.Item1,data.Item2, data.Item3);
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
公共课程
{
公共静态void Main()
{
var datalist=新列表();
添加(新元组(123123,“xxx”,“zz”);
添加(新元组(444555,“ybc”,“bb”);
添加(新元组(444555,“abc”,“aa”);
datalist=datalist.OrderBy(x=>x.Item1).ThenBy(x=>x.Item3.ToList();
foreach(数据列表中的var数据)
{
WriteLine(“{0}{1}{2}”,data.Item1,data.Item2,data.Item3);
}
}
}

x=>y
x=>{returny y;}
的缩写

然后可以修改主体以包含您喜欢的任何内容,而不是单个
return
语句

datalist.Sort(
    (x, y) => {
      var result = x.Item1.CompareTo(y.Item1);
      if (result == 0)
        result = x.Item3.CompareTo(y.Item3);
      return result;
    });

在第一个结果等价的情况下,只需进行第二个比较:

datalist.Sort((x, y) => {
    var cmp = x.Item1.CompareTo(y.Item1);
    return cmp == 0 ? x.Item3.CompareTo(y.Item3) : cmp;
});
或者,您可以使用
OrderBy
后跟
ThenBy
ToList
再次将它们放入列表中;如果您已经有了一个列表,并且不会将原始顺序用于其他内容,那么这是相当浪费的,但它更具表现力:

datalist = datalist.OrderBy(x => x.Item1).ThenBy(x => x.Item3).ToList();
当然,该费用的成本随着
datalist
的大小以及该操作的执行频率而增加


另一方面,如果您只想枚举一次,那么省略
ToList()
会降低成本,因为不会创建新列表,并且您的枚举可能会在整个周期之前退出(例如,在找到满足给定条件的某些项之后)然后,它甚至可能比第一种方法更有效。

var sortedList=datalist.OrderBy(x=>x.Item1)。然后是by(x=>x.Item3)。ToList()
修复了存储结果的问题。
datalist = datalist.OrderBy(x => x.Item1).ThenBy(x => x.Item3).ToList();