2016-04-13 3 views
1

xls行を4行目の行でソートしようとしています。これらの文字列の一部による文字列の並べ替え

各行の4番目の要素を識別し、内容をアルファベット順にリストするアルゴリズムの作成に問題があります。 各行の単語は「」で区切られています。

私は正しい方向に私を置くことができますか?

EDIT -------------------------- OK、

foreach (var line in list_lines.OrderBy(line => line.Split(' ')[3])) 

が問題をソート。私は必要に応じて線をソートします。 Excelはスペースを ';'で変更します。コンパイル時にエラーが発生したのはそのためです。

今や、文字列の各部分をintに解析する必要があるのは、数値ではなく最初の桁でソートするからです。

+0

文字列に@Patrick Hofmanの答えにあるような4番目の項目がない場合、何をしたいですか? – Draken

+0

それは変です。私はxlsファイルが5列に配置されていると確信しています – paddy

+0

おそらくスペース以外のシンボルで区切られています。デバッグ中に回線をチェックしましたか? – Draken

答えて

1

あなたが行を分割して、OrderByで3番目の項目を使用することができます。

foreach (var line in list_lines.OrderBy(line => line.Split(' ')[3])) 
{ 
} 
+0

あなたの助言に感謝します。あなたのコードはエラーを起こさないが、コンパイルすると私は奇妙なエラーが発生し、コードは動作しない。 – paddy

+1

その後、すべての行に4番目の項目があるわけではありません。 –

+0

ファイルには5つの列があります。すべて数字で入力します。 – paddy

1

まあ、ちょうどソート配列:

string[] list_lines = ...; 

// General case: not all strings have 4 parts 
Array.Sort(list_lines, (left, right) => { 
    String[] partsLeft = left.Split(' '); 
    String[] partsRight = right.Split(' '); 

    if (partsLeft.Length < 4) 
    if (partsRight.Length < 4) 
     return String.Compare(left, right, StringComparison.OrdinalIgnoreCase) 
    else 
     return -1; 
    else if (partsRight.Length < 4) 
    return 1; 

    return String.Compare(partsLeft[3], partsRight[3], StringComparison.OrdinalIgnoreCase); 
}); 

すべての行がにを保証している場合少なくとも4つのアイテムを持っていて、少なくとも簡略化することができます

Array.Sort(list_lines, (left, right) => 
    String.Compare(left.Split(' ')[3], 
       right.Split(' ')[3], 
       StringComparison.OrdinalIgnoreCase)); 
関連する問題