2011-07-25 29 views
0

我有以下以字典順序排列字符串的c#代碼。如何在按字典順序對字符串進行排序時忽略/跳過'n'元素

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噸

但是我想通過在詞典式排序處理

在這種情況下,詞典式排序將上述一個不同跳過第三和第四字符,以增強這種。

結果: 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噸

我該如何做到這一點?

回答

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))); 

編輯:修正差一錯誤。

0

您可以將傳遞給OrderBy的lambda更改爲將從字符串中移除第3個和第4個符號的lambda。

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