2016-09-26 27 views
1

Linqを使用してリストから最後の文字列を削除することはできますか?このようなもの:リスト内の最後の文字列を削除する

var arr = "hello mom hello dad".Split(' ').ToList(); //hello mom hello dad 
arr.RemoveLast(x => x.Contains("hello")); //hello mom dad 

リストの最後のオカレンスを基本的に削除します。文字列にContainsを使用する必要があります。リストにする必要があります。

+0

'arr'は配列であり、リストではありません。また、それは実際にあなたが既存のリストから削除するか、新しいシーケンスを作成するかどうかによって決まります。これはLinqが実際に行うことです。 – juharr

+0

@juharr私の悪い、私の例に '.ToList()'を追加するのを忘れました。 – MortenMoulder

+0

@DmitryBychenko最後に発生しました。 – MortenMoulder

答えて

3
list.RemoveAt(list.FindLastIndex(x => x.Contains("hello"))); 

これ以上のことに「ハロー」が含まれる最後の文字列を削除します。文字列項目のどれもが検索条件を満たしていない可能性、そして何もしないはずですその場合のコードがある場合、それはこのようなものだ:

int index = list.FindLastIndex(x => x.Contains("hello")); 
if (index != -1) 
    list.RemoveAt(index); 
+0

を使用する必要があります。うわー、リストに 'FindLastIndex'があったことはありませんでした。ありがとう! – MortenMoulder

+2

リスト内の値に「hello」が含まれていない場合は例外がスローされます。その代わりに 'FindLastIndex'の結果を変数に代入し、' RemoveAt'を呼び出す前に-1をチェックする必要があります。 – juharr

+0

@juharr常にIndexOutOfRange例外がないかどうかを確認してください。 – MortenMoulder

-2

は、ここでリストを使用してそれを行う方法は次のとおりです。

var arr = "hello mom hello dad".Split(' ').ToList(); 
arr.RemoveAt(arr.LastIndexOf("hello")); 
+0

Linqを強調しましたが、それは仕事をします。 – MortenMoulder

+0

なぜLINQが必要ですか? – ThePerplexedOne

+0

私はしません。また、それはContainsとはうまくいかないと私は言った。 – MortenMoulder

2

以下は、あなたが最後の項目のインデックスを決定できるようになること"hello"が含まれている場合は削除します。それはC#6構文を使用します。

var arr = "hello mom hello dad".Split(' ').ToList(); 
var removeIndex = arr.Select((s,i) => new { Value = s, Index = i }) 
        .LastOrDefault(x => x.Value.Contains("hello")) 
        ?.Index; 
if(removeIndex.HasValue) 
    arr.RemoveAt(removeIndex.Value); 
関連する問題