对 ArrayList 进行排序

发布于 2024-10-29 12:21:20 字数 413 浏览 0 评论 0原文

根据我的上一个问题,我已经现在尝试使用相同的方法按以下顺序排列它们,OrderByDescendingThenBy

原始(可以是任何随机顺序):

1:1
0:0
0:1
2:1
1:0
2:0

输出

2:0 
1:0 
0:0 
2:1 
1:1 
0:1

如您所见,a是< code>降序,b 为升序。但我仍然没有得到正确的排序。有什么想法吗?谢谢

Based on my previous question, I've trying now to have them in the following order using the same approach, OrderByDescending and ThenBy

Original (can be in any random order):

1:1
0:0
0:1
2:1
1:0
2:0

Output

2:0 
1:0 
0:0 
2:1 
1:1 
0:1

as you can see, a is descending, and b being ascending. But I'm still not getting the right sort. Any ideas why? Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

酷炫老祖宗 2024-11-05 12:21:20

想想你会手动做什么:

  1. 首先,你必须按第二部分升序对值进行排序
  2. 然后,你必须使用第一部分按降序对具有相同第二部分的值进行排序

在 LINQ 中翻译它非常相同

var sorted = arrayList
.Cast<string>()
.Select(x => x.Split(':'))
.OrderBy(x => x[1])
.ThenByDescending(x => x[0])
.Select(x => x[0] + ":" + x[1]);

:另外,ThenBy/ThenByDescending 方法用于对前面的 OrderBy/OrderByDescending 中相等的元素进行排序,因此是代码:)

Think to what you would do manually:

  1. First you must sort the values by the 2nd part in ascending order
  2. Then you must sort values having the same 2nd part, using the 1st part in descending order

Translated in LINQ it's pretty the same:

var sorted = arrayList
.Cast<string>()
.Select(x => x.Split(':'))
.OrderBy(x => x[1])
.ThenByDescending(x => x[0])
.Select(x => x[0] + ":" + x[1]);

To clarify a bit more, ThenBy/ThenByDescending methods are used to sort elements that are equal in the previous OrderBy/OrderByDescending, hence the code :)

故笙诉离歌 2024-11-05 12:21:20
arrayList.ToList().Select(i => { var split = i.Split(":".ToArray(),2));
                                return new { a = Int32.Parse(split[0]),
                                             b = Int32.Parse(split[1}) }; 
                               })
.OrderByDescending(i => i.a)
.ThenBy(i => i.b)

从您的问题来看,尚不清楚您是否希望反转排序依据(只需交换它们)。
从那里开始工作,也许会重新加入

.Select(i => String.Format("{0}:{1}", i.a, i.b));

祝你好运

arrayList.ToList().Select(i => { var split = i.Split(":".ToArray(),2));
                                return new { a = Int32.Parse(split[0]),
                                             b = Int32.Parse(split[1}) }; 
                               })
.OrderByDescending(i => i.a)
.ThenBy(i => i.b)

From your question it is not clear whether you want the order-by's reversed (just swap them).
Work from there, perhaps rejoining

.Select(i => String.Format("{0}:{1}", i.a, i.b));

Good luck

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文