当前位置: 首页 > 知识库问答 >
问题:

如何排序列表由T1和T3升序

滕项明
2023-03-14

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

var datalist= new List<Tuple<long, string, string>>();
  • first:按第一个元组(long)升序排序
  • 如果有相同数量的条目(long),则按字母顺序升序排列最后一个元组(最后一个字符串)

可能的排序输出:

  • 123123,xxx,zz

使用此代码,a可以按第一个元组(long)对列表排序,但不能按最后一个元组(last string)排序:

datalist.Sort((x, y) => x.Item1.CompareTo(y.Item1));

共有3个答案

长孙逸仙
2023-03-14

使用OrderByThenBy组合:

var result = datalist.OrderBy(x => x.Item1).ThenBy(x => x.Item3);
傅皓君
2023-03-14

x=

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

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

骆英纵
2023-03-14

如果第一个结果是等价的,则只需进行第二个比较:

datalist.Sort((x, y) => {
    var cmp = x.Item1.CompareTo(y.Item1);
    return cmp == 0 ? x.Item3.CompareTo(y.Item3) : cmp;
});

或者,您可以使用OrderBy,然后是ThenByToList将它们再次放入列表中;当您已经有一个列表并且不会使用原始顺序来处理其他事情时,这是相当浪费的,但是它更具表现力:

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

当然,该费用的成本会随着datist的大小以及执行此操作的频率而增加。

另一方面,如果你只想枚举一次,那么省略ToList()可以降低成本,因为没有创建新的列表,如果你的枚举可能在整个周期之前退出(例如,在找到一些符合给定标准的项之后),那么它甚至可能比第一种方法更有效。

 类似资料:
  • 这里,我试图在之后按排序列表,我有一个列表,其中在即处有的数据,在即处有的数据。 现在,我想要的是基于该按排序列表。为此,我使用了 感谢任何帮助。谢谢 下面是我所做的排序

  • 我下面的代码不起作用,我也不知道为什么。 它编译得很好,但结果似乎没有排序。

  • 我有一个通用的链表,目前由int组成,我想在默认情况下按升序排序,然后切换一个布尔值,按降序排序。我该怎么做?

  • 问题内容: 我在文件夹中有一组文件,所有文件都以相似的名称开头,除了一个。这是一个例子: 我可以列出指定文件夹中的所有文件,但是列表的排列顺序不是频谱编号的升序。示例:执行程序时得到以下结果: 但是这个顺序是不正确的。在Spectrum_999.txt之后应该有Spectrum_1000.txt文件。有人可以帮忙吗?这是代码: 问题答案: 您要的是数字排序。您需要实现一个Comparator并将其

  • 我有一个java中的double列表,我想按降序排列ArrayList。 输入ArrayList如下所示: 输出应该是这样的

  • 问题内容: 如果我有列表,如何以任意方式重新排序商品? 编辑:我不想洗牌。我想以预定义的方式对它们进行重新排序。(例如,我知道旧列表中的第3个元素应成为新列表中的第一个元素) 问题答案: 你可以这样