2016-07-30 6 views
1

文字列の4番目の文字に基づいてリストをソートする簡単な方法はありますか?私は彼らの前にコードを持つ国のリストを持っています。 「私たちの米国の国家」は私のリストの一つの文字列であり、私は完全な国名の前にコード(「私」)を無視したい。文字列のn番目の文字でリストをソートするC#

答えて

3
list.Sort((x, y) => x.Substring(3).CompareTo(y.Substring(3))); 
0

これはそれを行う必要があります - List<string>あなたは小文字を下げるために、上ケースを比較しませんので、これは、

var l = new List<string>(){"us unites states","uk united kingdom","ca canada"}; 
foreach (var s in l.OrderBy(s => s.ToLower().Substring(3)).ToList()) 
    Console.WriteLine(s); 

ToLowerを作品

[List<string>].OrderBy(s => s.Substring(3)).ToList(); 

変数あなたの元のリスト(あります両方がある場合)

1

他の回答とは異なり、このようなperformiソートはありません不要な部分文字列を作成します。代わりに、比較のために文字列オフセットを受け入れる既存のstring.Compare(strA, indexA, strB, indexB, length)オーバーロードを利用します。

list.Sort((s1, s2) => string.Compare(s1, 3, s2, 3, int.MaxValue)); 

また、あなたが比較動作を微調整するために使用することができ、オフセット値を受け入れ、他の有用なstring.Compareオーバーロードがあります。 (例:大文字小文字を区別しないなど)

+0

+ 1文字列リテラルを操作せずに既存の比較演算を使用する場合。私が追加するのは、 's1'と' s2'の両方が少なくとも4文字であることを確認する長さチェックです(潜在的な 'ArgumentOutOfRangeException'を避けるため) –

+1

@PhilGrefそして文字列が3文字より短い場合?それを無視するか、カスタム例外をスローするか、警告フラグを設定する必要がありますか?それを知らなければ、デフォルトのエラー処理を維持する方が良い選択肢になるかもしれません。 – AlexD

関連する問題