【发布时间】:2015-08-25 15:31:33
【问题描述】:
我正在尝试对包含元素列表的List<string> 进行排序,其中每个元素都是数字后跟字母。这就是为什么不能简单地将每个元素转换为 int 的原因。该列表在运行时生成,但例如,该列表可能包含以下元素:
10 dog, 53 cow, 2 crow, 29 horse, 12 rabbit, 107 frog, 35 cat, 7 dragon
我试过这样排序:
public void Compare()
{
sortedList = sortedList.OrderBy(g => g).ToList();
}
结果:
10 dog, 107 frog, 12 rabbit, 2 crow, 29 horse, 35 cat, 53 cow, 7 dragon
显然它是按字母顺序排序的,因为在这个例子中,107 排在 12 之前,而 107 中的“10”小于 12。但我需要以某种方式对其进行排序,使其按单词前面的数字顺序返回.
我需要这个例子来返回:
2 crow, 7 dragon, 10 dog, 12 rabbit, 29 horse, 35 cat, 53 cow, 107 frog
我对编码很陌生,这让我完全难过。关于如何实现我想要的结果的任何建议?
【问题讨论】:
-
您需要将数字与单词分开以进行排序。这个词总是一个词吗?如果是这样,您可以按空格分割字符串。但是,如果您可以有多个单词,则需要找到一种可靠地拆分它的方法。
-
虽然这是一个简化的示例,需要简化的解决方案,但您要寻找的通常称为“自然排序”。现有的解决方案可以解决这个问题,还可以处理字符串中不同数量的数字、不同的位置等问题。
-
@lbanezowns ,您应该考虑将有效的答案标记为已接受。