【发布时间】:2018-11-17 13:57:59
【问题描述】:
我看到很多帖子都在谈论 OrderBy().ThenBy()、Sort()、IComparable 等等。但我无法正确排序我的列表。
我需要按结果(字符串)以及配方是否可制作对配方列表进行排序。这将使可制作的食谱按字母顺序排列在列表的顶部,而不可制作的食谱出现在下面也按字母顺序排序(结果是一个字符串,即项目的名称)。像这样的:
之前:
- “箭头”:可制作
- “船”:不可制作
- “苹果”:不可制作
- “盒子”:可制作
- “可以”:可制作
之后
- “箭头”:可制作
- “盒子”:可制作
- “可以”:可制作
- “苹果”:不可制作
- “船”:不可制作
这将确保我的球员获得最佳结果。 这大概是 Recipe 类的样子:
public class Recipe : ScriptableObject
{
public Ingredient[] ingredients;
public string result;
public bool Craftable => //Not so complex and boring logic here;
}
这是我目前正在尝试的方式:
Recipe[] recipes = _recipes.OrderBy(r => r.Craftable).ThenBy(r => r.result).ToArray();
按 a-z 排序,但它并没有将可制作品与不可制作品区分开来。
我很高兴知道是否已经有一个带有答案的问题,以及这是否最终是重复的。
另外,我知道我可以通过将可制作的食谱与不可制作的食谱在两个不同的数组中分开,然后将它们分别按 a-z 排序,但这会很无聊。我想要更好更有趣的东西。
我很想知道这里性能最高的是哪一个,因为我最终可以每秒处理数百万个食谱。
提前感谢您的帮助。
【问题讨论】:
-
你能用
.OrderBy().ThenBy()展示你的尝试吗? -
您可以简单地为此编写自己的比较函数。
-
@John 是的,现在没那么多。一旦我回到我的电脑,也许。但它看起来很像 Dmitry S 解决方案,只是将 ThenBy 上的 x 替换为 r。
-
@AlKepp 我想看看在走这条路线之前是否还有其他选择。
-
@MultipleGameStyles 在这种情况下,它实际上并不意味着您在 lambda 中使用的变量名称。您可以使用
r、x或任何其他名称。它只是指向Recipe 类的实例。
标签: c# list sorting sql-order-by