web-dev-qa-db-ja.com

C#構文-コンマ、汎用リストへの変換、逆順による文字列の配列への分割

これの正しい構文は何ですか:

IList<string> names = "Tom,Scott,Bob".Split(',').ToList<string>().Reverse();

私は何を台無しにしていますか? TSourceの意味?

85
BuddyJoe

この質問はかなり古いことを認識していますが、文字列にスペースが含まれていることを除いて、同様の問題がありました。コンマだけでなく文字列を区切る方法を知る必要がある人のために:

string str = "Tom, Scott, Bob";
  IList<string> names = str.Split(new string[] {","," "},
  StringSplitOptions.RemoveEmptyEntries);

StringSplitOptionsは、スペース文字のみであるレコードを削除します...

10
Des Horsley
List<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList();

これは動作します。

3
Rune Grimstad

あなたがしようとしている場合

  1. 複数の区切り文字を使用する
  2. 空の文字列をフィルタリングする
  3. 先頭/末尾のスペースをトリミングする

以下が動作するはずです:

string str = "Tom Cruise, Scott, ,Bob | at";
IEnumerable<string> names = str
                            .Split(new char[]{',', '|'})
                            .Where(x=>x!=null && x.Trim().Length > 0)
                            .Select(x=>x.Trim());

出力

  • トム
  • クルーズ
  • スコット
  • ボブ

他の人が示唆したように、明らかに順序を逆にすることができます。

1
ablaze

これを試して:

List<string> names = new List<string>("Tom,Scott,Bob".Split(','));
names.Reverse();
1
Yona

ここで欠けているのは、.Reverse()がvoidメソッドであるということです。 .Reverse()の結果を変数に割り当てることはできません。ただし、Enumerable.Reverse()を使用して結果を取得する順序を変更できます

var x = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>()

違いは、Enumerable.Reverse()がvoid returnではなくIEnumerable <T>を返すことです

1
JaredPar