2016-03-27 18 views
1

言語はC#です。私は "a e"、 "b d"、 "c c"、 "d b"、 "e a"の5つのディレクトリを持っています。私は彼らがいない自分の名前の最初の半分のアルファベット順ではなく、後半のアルファベット順に表示したいアルファベット順の姓

 string[] dirs = Directory.GetDirectories(@"C:\mainFolder\"); 
     foreach (string dir in dirs) 
     { 
      listBox1.Items.Add(Path.GetFileName(dir)); 
     } 

:私は、次のコードを書いたので、彼らはアルファベット順にリストボックスに表示されます彼らの名前。彼らの名前は将来変更されるかもしれませんし、後で名前の後半のアルファベット順にとどまる必要がありますが、心配することはありません。私は、常に2つの半分だけが分離されていることを常に保証するコントロールを用意しています私はMSDNを調べて、おそらくthis methodが必要だという結論に達しましたが、それは文字列の配列に分割された文字列を必要とします。私が今説明した結果を達成するために既に持っているアレイをどのように使用すればよいでしょうか?何とか新しい配列の中に最初の配列を配置する必要がありますか?

答えて

1

あなたは、分割は、少なくとも2つの項目(にスペースがなかったという意味)にならない場合は、この例外をスローします。この

string[] dirs = Directory.GetDirectories(@"C:\mainFolder\"); 
foreach (string dir in dirs.OrderBy(p => p.Split(' ')[1])) 
{ 
    listBox1.Items.Add(Path.GetFileName(dir)); 
} 

ノートのようにLINQのOrderyByを使用することができます。また、p.Split(new [] { ' ' }, 2)を使用することもできます。は、後半に注文時に考慮するスペースが含まれている場合にのみ、最初のスペースで分割されます。

+0

実際、これは完全に動作し、受け入れられ、ありがとうございます! –

1

カスタムコンパレータを使用してリストと並べ替えを使用できます。

ここでは、名前の最後の部分(存在する場合)に基づいてリストをソートするカスタムコンパレータを使用してリストをソートしています。名前がスペースで区切られているかどうかに関わらず、完全に正常に動作します。

関連する問題