比较列表中对象中的字符串



我有两个对象,每个对象都包含一个名称/用户变量。我想比较列表中的这两个字符串,以确保日历权限列表中没有对象也在用户列表中。我现在尝试的方式是两个for循环,它似乎删除一切,但一个重复?

calendarPermissions = new ObservableCollection<CalendarPermissions>(await parse.GetCalendarPermissionsAsync(user.Email));
users = new ObservableCollection<UserList>(await parse.GetUserListAsync());
for (int x = 0; x < users.Count; x++) 
{
for (int y = 0; y < calendarPermissions.Count; y++)
{
if (calendarPermissions[y].User == users[x].Navn)
{
Debug.WriteLine($"{calendarPermissions[y].User} {users[x].Navn}");
users.Remove(users[x]);
}
}
}

我不完全确定你在问什么?我建议这样一个解决方案来简化你的代码:

var calenderPerms = new List<CalenderPerms>
{
new CalenderPerms { User = "A" },
new CalenderPerms { User = "B" },
new CalenderPerms { User = "C" },
new CalenderPerms { User = "D" },
};
var users = new List<User> 
{
new User { Navn = "A" },
new User { Navn = "B" },
new User { Navn = "C" },
new User { Navn = "F" },
};
// HashSet for faster .Contains query
var calenderPermsUsers = calenderPerms.Select(c => c.User).ToHashSet();
users.RemoveAll(u => calenderPermsUsers.Contains(u.Navn));

这将从users列表中删除除User F之外的所有内容,即两个列表之间的交集—类似于您自己的代码。

您是否试图获得不同的结果?

var calendarPermissionUsers = calendarPermissions.Select(x => x.User).ToArray();
users.RemoveAll(user => calendarPermissionUsers.Contains(user.Navn));

相关内容

  • 没有找到相关文章

最新更新