如何在按字典顺序排序字符串时忽略/跳过'n'元素

时间:2011-07-25 10:03:31

标签: c# linq algorithm sorting

我有以下c#代码,按字典顺序(按字母顺序)对字符串进行排序。

string str = "ACGGACGAACT";

IEnumerable<string> sortedSubstrings = Enumerable.Range(0, str.Length) .Select(i => str.Substring(i)) .OrderBy(s => s);

结果:
0 AACT
1 ACGAACT
2 ACGGACGAACT
3 ACT
4 CGAACT
5 CGGACGAACT
6 CT
7 GAACT
8 GACGAACT
9 GACGAACT
10 T

但是我想通过在字典排序过程中跳过第3和第4个字符来增强这种排序

在这种情况下,词典排序将与上面的不同。

结果: 0 AA [CT
1 AC [T
2 AC [GG] ACGAACT
3 AC [GA] ACT
4 CG [GA] CGAACT
5 CG [AA] CT
6 CT
7 GA [CG] AACT
8 GA [AC] T
9 GG [AC] GAACT
10 T

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:2)

这可以通过调整传递给OrderBy的lambda来完成。这样的事情应该这样做:

var sortedSubstrings = 
    Enumerable.Range(0, str.Length)
    .Select(i => str.Substring(i))
    .OrderBy(s => s.Length < 3 ? s : s.Remove(2, Math.Min(s.Length - 2, 2)));

修改:修正了一个错误。

答案 1 :(得分:0)

您可以将传递给OrderBy的lambda更改为将从字符串中删除第3个和第4个符号的lambda。

答案 2 :(得分:0)

var sorted = source.OrderBy(s => new string(s.Where((ch, n) => n != 2 && n != 3).ToArray()));