2011-07-25 7 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 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

どうすればいいですか?

答えて

2

これは、OrderByに渡されたラムダを調整することによって行うことができます。このような何かがそれを行う必要があります。

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

編集を:は、off-by-oneエラーを修正しました。

0

OrderByに渡されたラムダを、文字列から3番目と4番目のシンボルを削除するものに変更することができます。

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