2017-01-19 4 views
-4

重複を削除したいが空白のオブジェクトを削除したくないオブジェクトのリストがあります。 私はDistinctByラムダ式を使用しています。しかし、重複も削除されます。 空白を渡してオブジェクトに適切な値を持つオブジェクトのみをチェックする条件を提供するのに助けてくれる人はいますか?リストから重複した値を削除する方法ですが、そのリストの空の文字列をすべて含める

+5

ですが? –

+8

@viveknuna:たぶんあなたは彼の 'code buddy'になれるかもしれない – musefan

+0

あなたはオブジェクトを言うが、文字列のリストを意味するのだろうか? – Magnus

答えて

1
あなたは非常に単純な拡張メソッドを使用でき

:あなたのコードの相棒は

public static void DistinctKeepingEmptyStrings(this List<string> list) { 
     var support = new List<string>(list); 
     HashSet<string> knownValues = new HashSet<string>(); 
     foreach (var aString in list) { 
      if (aString == "" || knownValues.Add(aString)) { 
       support.Add(aString); 
      } 
     } 
     list.Clear(); 
     list.AddRange(support); 
    } 
+0

これを一度だけ使用しなければならないのであれば、私の考えでは拡張方法はやり方ではありません。もちろん、これは拡張メソッドとしてではなく、それ自体でも使用できます。 – EpicKip

0

例:

VARリストは、この場合にはすべての重複(マイナス空の文字列)からなるリスト その後、私はちょうど重複を反復処理し、listOfValuesからそれらを削除しています。

List<string> listOfValues = new List<string> {"test", "test2", "", "test2", "", ""}; 
var list = listOfValues.GroupBy(r => r).SelectMany(grp => grp.Skip(1)).Where(r => r != ""); 
foreach (var aVar in list) 
{ 
    listOfValues.Remove(aVar); 
} 
+0

カウントが0より大きいかどうかを確認する必要はありませんでしたか?存在していれば、重複としてマークされませんか? –

+0

もし存在すればそれは重複ではありませんか? – EpicKip

+0

しかし、あなたがコレクションを変更しているので、これは動作しないとタイプすると自分自身に思ったので、@ Romaの答えはより良いです:) – EpicKip

関連する問題