gpt4 book ai didi

c# - OrderBy 数字和 ThenBy bool 值不适用于 List

转载 作者:太空宇宙 更新时间:2023-11-03 17:29:49 24 4
gpt4 key购买 nike

我有一个对象列表,我试图通过两次迭代对其进行排序。

第一种是按对象中的整数字段(即 1-1000)按升序对对象进行排序,然后按对象中的 bool 字段按 true 和 false 的 bool 值排序。

我有的是...

    public void updateAdapter()
{
List<Object> foobar = db.Get(ObjectID);

foobar = foobar.OrderBy(s => int.Parse(s.Tag)).ThenByDescending(s => s.Duplicate).ToList();

adapter = new ListAdapter(this, foobar);
RunOnUiThread(() => adapter.NotifyDataSetChanged());
ListView.Adapter = adapter;
}

我的列表按整数字段 n 升序完美排序,但之后不按真值排序。我希望所有真值在按整数字段升序排序后都位于对象列表的顶部。

示例输入:

Lists of Objects Inputted:
FooBar(11, false),
FooBar(1, false),
FooBar(54, true),
FooBar(34, true)
FooBar(77, false),
FooBar(33, false)

List of Objects Outputted:
FooBar(1, false),
FooBar(11, false),
FooBar(33, false),
FooBar(34, true),
FooBar(54, true),
FooBar(77, false),

任何帮助都是巨大的帮助。谢谢

最佳答案

你对 orderby-thenby 所做的事情的理解完全倒退了。

您错误地认为 orderby 首先按整数对列表进行排序,然后按 bool 属性对列表进行稳定的重新排序。这会将所有正确的放在一起,按整数排序,并将所有错误放在一起,按整数排序。

这不是它的作用。

orderby 将列表按整数排序,然后 thenby 将两个记录排序到相同整数的所有位置,并按 bool 属性对该子列表进行排序。

这应该符合您的直觉。如果我递给你一堆带有数字和字母的卡片,让你先按数字再按字母排序,然后我递给你 3A、2B、2A、3B,结果将是 2A、2B、3A、3B 和不是 2A、3A、2B、3B,对吧?

所以你想撤销你的子句。 bool 值的一阶;这将把所有的真假放在一起。然后在integer属性上做一个thenby,所有true按整数排序,所有false按整数排序。

也就是说,LINQ to Objects 中的 orderby 需要作为稳定排序来实现,所以如果您真的想用困难的方式来实现,您可以对整数属性执行 orderby,然后 second orderby bool 属性,你会得到正确的结果。但这是浪费,因为它对整个列表进行了两次排序,而不是对整个列表进行一次排序,然后对每个子列表进行排序。对两个半列表进行排序通常比对整个列表进行排序便宜。

关于c# - OrderBy 数字和 ThenBy bool 值不适用于 List,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49517159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com