比较两个列表最简单的方法是什么?

nec*_*666 1 c# linq list

使用C#,我有一个对象列表和一个int列表.例如,我有一个事件列表,每个事件都有一个eventId.

我想比较事件列表和整数列表,并删除任何对象,其ID出现在整数列表中.所以,例如,我有一个像这样的对象列表:

Event Id     Event Name
1            Event1
2            Event2
3            Event3
Run Code Online (Sandbox Code Playgroud)

并且我的int列表包含1和3.所以我想删除Event1和Event3,留下我唯一的Event2.这样做的最佳方法是什么?

我也想反过来做.所以我还想得到一个没有出现在对象列表中的整数列表.所以我有一个没有出现在整数列表中的事件列表,然后我会有一个未出现在对象列表中的整数列表.

就目前而言,我正在使用多个foreach和if语句,而且效率似乎非常低效,这是一些应该更容易的代码.我知道使用linq可能是可行的,但我还在学习并且还没有完全掌握linq.

Cha*_*ger 5

正如您猜测的那样,您可以使用LINQ.您有一个事件列表,您希望在第二个列表中获取id存在的事件.

var result = listOfEvents.Where(ev => listOfInts.Contains(ev.Id)).ToList();
Run Code Online (Sandbox Code Playgroud)

反之亦然:

var result = listOfEvents.Where(ev => !listOfInts.Contains(ev.Id)).ToList();
Run Code Online (Sandbox Code Playgroud)

请注意,这会创建一个包含结果的新列表,但不会修改列表.我建议使用LINQ方法,但如果你真的想这样做,可以使用RemoveAll方法List<T>并传递类似的谓词:

listOfEvents.RemoveAll(ev => listOfInts.Contains(ev.Id));
Run Code Online (Sandbox Code Playgroud)

  • 根据结果​​的使用,您可能会考虑不在最后添加对ToList()方法的调用.LINQ使用deferred评估.调用ToList()会立即强制进行评估. (2认同)