【发布时间】:2023-03-10 08:46:02
【问题描述】:
我有一个 100 个元素的列表,它们看起来像这样:
- 狗
- 猫 (2)
- 鸟 (34)
- 猫 + 狗 (11)
- 狗 (5)
另外,我有一个特定的要求,比如说:
string[] order = {"dog", "bird", "cat", "cat + dog"};
我需要我的方法按上述顺序排序,然后按数字排序,得到结果:
- 狗
- 狗 (5)
- 鸟 (34)
- 猫 (2)
- 猫 + 狗 (11)
目前我有类似的东西:
bool equal = collection
.OrderBy(i => Array.IndexOf(order, i.Split('(').First()))
.ThenBy(i => i.Split('(').Last().Replace(")", " "))
.SequenceEqual(collection2);
但它不起作用。 ThenBy 与第一次排序重叠。
同样在将int.Parse 输入ThenBy 括号后,我得到了一个异常。
帮助我实现这一目标。
【问题讨论】:
-
您是否打算制作自定义比较功能?
-
"list of 100 elements" 是字符串“cat (2)”的元素,或者是具有
cat和2属性的元素 -
将您的 i.Split('(').Last().Replace(")", " ") 解析为数字有帮助吗?即 bool equal = collection .OrderBy(i => Array.IndexOf(order, i.Split('(').First())) .ThenBy(i => int.Parse(i.Split('('). Last().Replace(")", ""))) .SequenceEqual(collection2);
-
@Lucifer 他还有一步:按另一个数组排序一个数组