【问题标题】:C# Advanced use of OrderBy and ThenByC# OrderBy 和 ThenBy 的高级使用
【发布时间】:2020-08-21 16:12:41
【问题描述】:

我大部分时间都在整理,但我的排序有一个小问题。

我想按几个特定的​​单词对列表进行排序,这个列表可能会有对,例如 Compiled Box 和 Box。我想要配对的那些项目。一个词之前不必有其他词,例如“Sale”

例子:

List<string> wordList = new List<string> { "Compiled Box", "Office Order", "Shop Order",
"Box", "Compiled Thing", "Thing", "Sale" };

List<String> newList = wordList
    .OrderByDescending(item => item.Contains("Shop Order"))
    .ThenBy(item => item.Contains("Office Order"))
    .ThenBy(item => item.Replace("Compiled", ""))
    .ThenBy(item => item).ToList();

我的输出是:

Shop Order
Compiled Box
Compiled Thing
Box
Sale
Thing
Office Order

我想要的输出是:

Shop Order
Office Order
Compiled Box
Box
Sale
Compiled Thing
Thing

我明白为什么我得到了我得到的输出,但我对如何在这里实现预期的结果并不乐观?谢谢

【问题讨论】:

  • 您能用文字解释您的订单吗?而且,除了这 6 个值之外,您是否想要对其他事物进行排序?其他可能的值是什么,它们将如何在列表中排序?
  • 该列表可能包含也可能不包含“Shop Order”和“Office Order”字样。列表中的单词可能会或可能不会以“已编译”一词开头,因此可能还有一些其他词,例如“绘图”(将在我要创建的列表中的位置 [4])这是一个非常奇怪的排序,希望这能澄清一点。
  • 这不是我运行您的代码时得到的顺序。当我将第一个 ThenBy 替换为 ThenByDescending 时,我收到了您的订单。

标签: c# linq sorting lambda


【解决方案1】:
List<String> newList = wordList
    .OrderByDescending(item => item.Contains("Shop Order"))
    .ThenByDescending(item => item.Contains("Office Order"))
    .ThenBy(item => item.Replace("Compiled ", ""))
    .ThenByDescending(item => item.Contains("Compiled "))
    .ThenBy(item => item)
    .ToList();

【讨论】:

  • @plusss 如果有帮助,请将其标记为答案。
猜你喜欢
  • 1970-01-01
  • 2020-06-10
  • 1970-01-01
  • 1970-01-01
  • 2018-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多