【发布时间】:2017-12-31 04:26:53
【问题描述】:
我有一个IEnumerable<string>,其值如下:
- pp
- pp.10.0
- pp.6.0
- pp.6.1
- pp.8.3
- kp.10.1
- kp
- kp.3.20
...等
我想按字母顺序组织它们,但将具有两位数的值(例如上面的 10.0 和 10.1 的值)保持在具有单个数字的值之下。换句话说,排序后应该是这样的:
- kp
- kp.3.20
- kp.10.1
- pp
- pp.6.0
- pp.6.1
- pp.8.3
- pp.10.0
我尝试了一个简单的IEnumerable<string>.OrderBy(x => x, StringComparer.CurrentCultureIgnoreCase),但在这种情况下不太奏效。
另外请记住,如果您正在考虑拆分字符串,pp 和 kp 部分也可以包含点。
【问题讨论】:
-
我确实在考虑拆分字符串,你也应该这样做。如果这些部分也有点,请提供更多示例。一般的想法是,您希望通过某种
new { key1 = ... , key2 = ..., value = s }类型进行排序,该类型提供了一个确实具有简单字典顺序的复合键。 -
“另外请记住,如果您正在考虑拆分字符串,pp 和 kp 部分中也可能包含点”。在这种情况下应该如何排序?我不清楚。
-
你想要“自然秩序”,比如stackoverflow.com/questions/248603/…
-
你在这里遇到了困难,因为你试图排序的东西实际上是更复杂的对象,而不仅仅是一个字符串。考虑改用更强类型的对象。
-
@HansKesting 完美运行,将其作为答案,我会将其标记为正确。