【发布时间】:2014-01-25 21:47:53
【问题描述】:
我有一个这样的字符串数组
May#01
April#02
Jan#03
我需要先按字母顺序排序,然后按 # 旁边的数值排序。 字母排序很明显,但我似乎没有得到数字部分。
【问题讨论】:
标签: c#
我有一个这样的字符串数组
May#01
April#02
Jan#03
我需要先按字母顺序排序,然后按 # 旁边的数值排序。 字母排序很明显,但我似乎没有得到数字部分。
【问题讨论】:
标签: c#
按值排序字符串(这将为您提供字母排序)。然后按#字符后的整数值过滤:
array.OrderBy(s => s)
.ThenBy(s => Int32.Parse(s.Split('#')[1]))
示例:
string[] array = { "May#01", "April#02", "Jan#03", "April#01" };
var query = array.OrderBy(s => s)
.ThenBy(s => Int32.Parse(s.Split('#')[1]));
结果:
"April#01"
"April#02"
"Jan#03"
"May#01"
【讨论】:
var input = new[] { "May#01", "April#02", "Jan#03", "Jan#02", "Jan#1" };
var result = input.OrderBy(s => s.Split('#')[0])
.ThenBy(s => Int32.Parse(s.Split('#')[1]));
结果:
[
"April#02",
"Jan#1",
"Jan#02",
"Jan#03",
"May#01"
]
另一个答案将产生输出:
[
"April#02",
"Jan#02",
"Jan#03",
"Jan#1",
"May#01"
]
我假设这是不正确的,因为 Jan#02 在 Jan#1 之前。
您可以通过执行一次拆分并将这两个部分与原始字符串一起存储在匿名类中来提高我的代码效率,但我不想使代码复杂化。
【讨论】:
Split 方法,以及Select 和string.Join