我有以下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
我怎样才能做到这一点?
答案 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()));