C# 如何基于另一个数组从列表中排除数据?

C# 如何基于另一个数组从列表中排除数据?,c#,.net,C#,.net,根据列表是否包含另一个数组中的某个ID,是否有任何方法从列表中排除数据 例如,假设: int[] excludedCities = new int[] { 342, 344, 22, 19, 2 }; List<Cities> cities = new List<Cities>(); int[]excludedCities=newint[]{342344,22,19,2}; 列表城市=新列表(); 我想删除excludedCities数组中id为的城市。有没有比迭代

根据列表是否包含另一个数组中的某个ID,是否有任何方法从列表中排除数据

例如,假设:

int[] excludedCities = new int[] { 342, 344, 22, 19, 2 };
List<Cities> cities = new List<Cities>(); 
int[]excludedCities=newint[]{342344,22,19,2};
列表城市=新列表();
我想删除excludedCities数组中id为的城市。有没有比迭代列表更简单的方法?

HashSet excludedCityHash=newhashset(excludedCities);
HashSet<int> excludedCityHash = new HashSet<int>(excludedCities);
IEnumerable<City> filtered = cities.Where(city => !excludedCityHash.Contains(city.ID));
IEnumerable filtered=cities.Where(city=>!excludedCityHash.Contains(city.ID));
你可以做的只是:

IEnumerable<City> filtered = cities.Where(city => !excludedCities.Contains(city.ID));
IEnumerable filtered=cities.Where(city=>!excludedCities.Contains(city.ID));

。。。但对于一小部分被排除在外的城市,性能将开始受到影响。

如果您愿意从城市列表中删除这些元素,则可以执行以下操作:

cities.RemoveAll(c => excludedCities.Contains(c.Id));
List<Cities> result = cities.Where(c => !excludedCities.Contains(c.Id))
                            .ToList();
否则,您可以执行以下操作:

cities.RemoveAll(c => excludedCities.Contains(c.Id));
List<Cities> result = cities.Where(c => !excludedCities.Contains(c.Id))
                            .ToList();
List result=cities.Where(c=>!excludedCities.Contains(c.Id))
.ToList();

cities.RemoveAll(city=>excludedCities.Contains(city.ID))
RemoveAll()特定于List,而Where()是LINQ扩展,因此适用于所有IEnumerable实现。此外,Where()不会强制您实现结果。实际上,我对在列表中使用RemoveAll非常怀疑。根据实现的不同,它可能涉及在底层数组中复制大量项,这可能会阻塞大量集合。一般来说,要避免从阵列支持的列表中删除项。@glenebob我们为什么在这里谈论性能?OP问了一个相当简单的问题:“我想删除excludedCities数组中id为的城市”。@abdalrahmanmakahleh很高兴它起作用,非常欢迎您。如果您使用的是
Set
对象,那么您可以使用Set difference。如果A和B是to集合,那么A-B(或者A\B,比如A drop B)是A中不在B中的所有元素