通过将其视为整数来对字符串进行排序

时间:2012-04-03 16:59:50

标签: c# linq

抱歉,我连续问了太多问题。

我有一个像这样的字符串列表:

“firstnumber-lastnumber”

我想按第一个数字排序,然后按最后一个数字

排序

例如,如果我有:

"2-43"
"1-11"
"1-9"

排序后应该是这样的:

"1-9"
"1-11"
"2-43"

我使用了这个LINQ查询:

numbers.OrderBy(s => s.Split('-')[0]).ThenBy(s => s.Split('-')[1]);

但是这个查询按字符串逻辑排序,而不是按逻辑顺序排序。

所以,如果我有2和11,我希望2来11之前

(字符串逻辑的排序顺序是11之前的11,因为它以'1'开头)

非常感谢您的帮助

2 个答案:

答案 0 :(得分:6)

使用int.Parse(str)str转换为数字。

numbers.OrderBy(s => int.Parse(s.Split('-')[0])).ThenBy(s => int.Parse(s.Split('-')[1]));

答案 1 :(得分:3)

考虑使用vcepa的StringLogicalComparer类。它使用了类似的顺序,他已经找到了所有的问题。

数字字符串在C#中排序
http://www.codeproject.com/Articles/11016/Numeric-String-Sort-in-C