2017-11-16 4 views
1

から最初の部分のみを取り出し、私はリストを持っているがスプリットリストの要素とスプリット

List<string> someList = new List{"1-30","20-10","21-23","34-80"}; 

を言って、私はリストを分割する必要があるので、私は次の値

{"1","20","21","34"}; 

を持っている私が試しました

someList 
    .SelectMany(n => n.Split('-')[0]) 
    .ToList(); 

しかし、それは私に望ましい結果を与えていません。

UPDATE: 申し訳ありませんがSelectを使用して誰もが、私の問題を解決しました。当時の一つ、あなたは愚かな過ち

+2

これは何を返しますか?なぜあなたは 'Select()'の代わりに 'SelectMany()'を使っていますか? – CodeCaster

+0

申し訳ありません、選択してください。私はコーヒーが必要だと思う。 – wingskush

+0

'' 1-30 '、' 20-100 '、' 21-23 '、' 34-80''これは文字列ではないので、あなたのコード行 'List someList = new List {'1-30'、 '20-100'、 '21-23'、 '34-80'}; '最初にコンパイルしないでください。 – Rahul

答えて

4

を作るときには、各項目の第一部分を取らなければならないとあなたがSubstringのヘルプ(すなわち-までの項目の値をとる)で行うことができます。

List<string> someList = new List{ 
    "1-30", "20-100", "21-23", "34-80"}; 

var result = someList 
    .Select(item => item.Substring(0, item.IndexOf('-'))) 
    .ToList(); // if you want a new list 
あなたは 既存のリストを変更したい場合は

は、単にループを実装:

for (int i = 0; i < someList.Count; ++i) 
    someList[i] = someList[i].Substring(0, someList[i].IndexOf('-')); 

は編集:Selectの代わりにSelectManyを入力したときに起こっていること。

SelectManyは、結果としてIEnumerable<T>を望んでいるとStringので、あなたが平らList<char>の持っているIEnumerable<char>です:

['1', '2', '0', '2', '1', '3', '4'] 

をしてください、['1']; ['2', '0']; ['2', '1']; ['3', '4'](各文字列("1", "20", "21", "34")は文字のコレクションあるものとして扱われることに注意してください)

+0

ありがとうございました。 – wingskush

+0

@wingskush: 'SelectMany'は、出力として*列挙子*を必要とします。 'SelectMany(' item => ... someCollection) ';あなたの場合は 'char'の* collection *である文字列を持っています:' IEnumerable 'なので、違和感があります。 –

1

リストを平坦化する必要がないので、selectManyを使用する必要はありません。選択し使用すると、リスト

{ "1-30"、 "20-100" ...など}

内の各文字列を返します。 { - 、、 "3"、 "0" ...など ""、 "1"}

をだからあなたのスプリットSelectManyが実際に

その結果文字のシーケンスに文字列を平らにします使用間違った結果になります。

リスト内の各項目を選択し、 ' - '文字で項目を分割し、分割の最初の結果を選択します。これはあなたに正しい結果を与えるはずです。

List<string> someList = new List<string> { "1-30", "20-100", "21-23", "34-80" }; 
var splitString = someList.Select(x => x.Split('-').First()).ToList(); 
+0

CodeCastersのコメントが表示されませんでした。私の答えは – Riv

+0

@StuartLCに更新されますが、同意しますがなぜCodeCasterをクレジットしますか?彼の答えのコピーではありません。彼はちょうどコメントして、それは彼自身の意見です – Rahul

+1

@StuartLC明確化が追加されました – Riv

-1

あなたはおそらく望めないほど美しくはありませんが、それは仕事です。

List<string> someList = new List<string>{"1-30","20-100","21-23","34-80"}; 
List<string> newList = new List<string>(); 
foreach (var v in someList) 
    { 
     string[] s = v.Split('-'); 
     newList.Add(s[0]); 
    } 
関連する問題