我想按T1和T3升序对以下三元组列表进行排序:
var datalist= new List<Tuple<long, string, string>>();
可能的排序输出:
使用此代码,a可以按第一个元组(long)对列表排序,但不能按最后一个元组(last string)排序:
datalist.Sort((x, y) => x.Item1.CompareTo(y.Item1));
使用OrderBy
和ThenBy
组合:
var result = datalist.OrderBy(x => x.Item1).ThenBy(x => x.Item3);
x=
然后,可以修改主体以包含任何您喜欢的内容,而不是单个的
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();
当然,该费用的成本会随着datist
的大小以及执行此操作的频率而增加。
另一方面,如果你只想枚举一次,那么省略ToList()
可以降低成本,因为没有创建新的列表,如果你的枚举可能在整个周期之前退出(例如,在找到一些符合给定标准的项之后),那么它甚至可能比第一种方法更有效。
这里,我试图在之后按排序列表,我有一个列表,其中在即处有的数据,在即处有的数据。 现在,我想要的是基于该按排序列表。为此,我使用了 感谢任何帮助。谢谢 下面是我所做的排序
我下面的代码不起作用,我也不知道为什么。 它编译得很好,但结果似乎没有排序。
我有一个通用的链表,目前由int组成,我想在默认情况下按升序排序,然后切换一个布尔值,按降序排序。我该怎么做?
问题内容: 我在文件夹中有一组文件,所有文件都以相似的名称开头,除了一个。这是一个例子: 我可以列出指定文件夹中的所有文件,但是列表的排列顺序不是频谱编号的升序。示例:执行程序时得到以下结果: 但是这个顺序是不正确的。在Spectrum_999.txt之后应该有Spectrum_1000.txt文件。有人可以帮忙吗?这是代码: 问题答案: 您要的是数字排序。您需要实现一个Comparator并将其
我有一个java中的double列表,我想按降序排列ArrayList。 输入ArrayList如下所示: 输出应该是这样的
问题内容: 如果我有列表,如何以任意方式重新排序商品? 编辑:我不想洗牌。我想以预定义的方式对它们进行重新排序。(例如,我知道旧列表中的第3个元素应成为新列表中的第一个元素) 问题答案: 你可以这样