在两个条件下对基于字符串的数组进行排序

时间:2014-01-25 13:25:39

标签: c#

我有一个像这样的字符串数组

May#01
April#02
Jan#03

我需要先按字母顺序排序,然后按#旁边的数值排序。 字母排序很明显,但我似乎没有得到数字部分。

2 个答案:

答案 0 :(得分:5)

首先按其值排序字符串(这将为您提供字母排序)。然后按#字符后面的整数值过滤:

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"

答案 1 :(得分:1)

    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之前出现。

您可以通过拆分一次并将两个部分与原始字符串一起存储在匿名类中来使我的代码更高效,但我不想卷积代码。