2016-10-10 9 views
1

C#を使用して、私はオブジェクトのリストとintのリストを持っています。たとえば、私はeventIdを持つイベントのリストを持っています。2つのリストを比較する最も簡単な方法は何ですか?

イベントリストをintのリストと比較し、intのリストに表示されるIDを持つオブジェクトをすべて削除します。ですから、例えば、私はそうのようなオブジェクトのリストを持っている:

Event Id  Event Name 
1   Event1 
2   Event2 
3   Event3 

とintの私のリスト1を含み、そして3だから私は、私の唯一のイベント2を残して、イベント1とEvent3を削除したいと思います。これを行う最善の方法は何ですか?

また逆もしたいです。だから私はまた、オブジェクトリストに表示されないintのリストを取得したい。だから私は、intのリストに表示されないイベントのリストを持っていたし、オブジェクトのリストに表示されないintのリストを持っています。

今のところ、私は複数のforeachとif文を使用していますが、非常に非効率的であるように見えます。私はそれがおそらくlinqを使用して行うことがわかっていますが、私はまだ学んでいるとlinqをまだ完全に把握していない。

答えて

5

あなたが推測したように、LINQを使用することができます。あなたはイベントのリストを持っています。そのイベントが2番目のリストに存在するイベントを取得したいとします。

var result = listOfEvents.Where(ev => listOfInts.Contains(ev.Id)).ToList(); 

とリバース:

var result = listOfEvents.Where(ev => !listOfInts.Contains(ev.Id)).ToList(); 

注これはあなたの結果が含まれてい新しいリストを作成し、それが所定の位置にリストを変更しません。私は、LINQのアプローチが望ましいことをお勧めしたい、しかし、あなたが本当にこれをやってみたかった場合、あなたはList<T>RemoveAllメソッドを使用して、類似した述語を渡すことができます。

listOfEvents.RemoveAll(ev => listOfInts.Contains(ev.Id)); 
+0

おかげで、これは完璧です。 – necrofish666

+2

結果の使用方法によっては、最後にToList()メソッドへの呼び出しを追加しないことを検討することがあります。 LINQは、評価が低い評価を使用します。 ToList()を呼び出すとすぐに評価が強制されます。 –

関連する問題