C# 使用Linq签入列表和筛选集合
我正在使用linq从用户集合中删除用户,如下所示。做这件事有更好的方法吗?我可以合并第一个和第二个查询吗C# 使用Linq签入列表和筛选集合,c#,linq,C#,Linq,我正在使用linq从用户集合中删除用户,如下所示。做这件事有更好的方法吗?我可以合并第一个和第二个查询吗 List<int> userIDs = ConfigurationManager.AppSettings["users"].Split(',').Select(userId => Convert.ToInt32(userid)).ToList(); foreach (int userId in userIDs) { userInfoList.R
List<int> userIDs = ConfigurationManager.AppSettings["users"].Split(',').Select(userId => Convert.ToInt32(userid)).ToList();
foreach (int userId in userIDs)
{
userInfoList.RemoveAll(user => (user.UserId.Equals(userId)));
}
List userId=ConfigurationManager.AppSettings[“users”].Split(“,”).Select(userId=>Convert.ToInt32(userId)).ToList();
foreach(userId中的int userId)
{
userInfoList.RemoveAll(user=>(user.UserId.Equals(UserId));
}
UserInfoList
是用户的集合
提前感谢这样会更有效率:
HashSet<int> userIDs = new HashSet<int>(ConfigurationManager.AppSettings["users"].Split(',').Select(userId => Convert.ToInt32(userId)));
userInfoList.RemoveAll(user => userIDs.Contains(user.UserId));
HashSet userId=newhashset(ConfigurationManager.AppSettings[“users”].Split(“,”).Select(userId=>Convert.ToInt32(userId));
userInfoList.RemoveAll(user=>userIDs.Contains(user.UserId));
如果userid中有n个元素,userInfoList中有m个元素,那么您的解决方案是O(n*m)。使用HashSet,复杂性变得O(n+m)-好得多。(假设哈希表操作是常数时间)。用户信息列表中是否已经填充了项目,并且您希望对其进行过滤,或者这只是初始化它的一个步骤?您可以通过一个查询一次创建所有列表。userInfoList将被填充。我使用了Petar Ivanov解决方案,因为我需要一些其他情况下的原始列表。实际上,您可以使用
contains
,因为user.UserId
的类型是int
(因为UserId
的类型是HashSet
)