[英]Linq query to compare 2 List<string> for distinct matches
我是Linq的新手,已经在各处搜索了此内容,但找不到答案,因此如果已经提出要求,则可以找借口。 我正在寻找一个Linq查询(最好使用lambda /方法语法)来比较2个列表:
IList<string> List1 = new List<string> { usr.User1, usr.User2, usr.User3, usr.User4 };
IList<string> List2 = new List<string>{ "Tim", "Bob", "Brian", "Paul" };
基本上,我希望只有4种可能的比赛,因此:
usr.User1 == "Tim",
usr.User2 == "Bob",
usr.User3 == "Brian",
usr.User4 == "Paul"
理想情况下,我希望它返回一个int值从0-4的整数,因此,如果上述所有匹配均成功,则它将返回4,如果没有匹配成功,则返回0,等等。非常感谢。
List1.Zip(List2, (item1, item2) => item1 == item2 ? 1 : 0).Sum();
Zip()中定义的函数将返回1或0,具体取决于字符串是否匹配,然后您只需对结果求和即可。
另一个解决方案是使用相交。 像这样:
private class User
{
public string UserName { get; set; }
}
[TestMethod]
public void TwoListsWithSameUsersReturnCorrectCountOfEquality()
{
var user1 = new User { UserName = "Tim" };
var user2 = new User { UserName = "Bob" };
var user3 = new User { UserName = "Brian" };
var user4 = new User { UserName = "Paul" };
IList<string> List1 = new List<string>
{ user1.UserName, user2.UserName, user3.UserName, user4.UserName };
IList<string> List2 = new List<string> { "Tim", "Bob", "Brian", "Paul" };
var sameUser = List1.Distinct().Intersect(List2.Distinct());
Assert.AreEqual(4, sameUser.Count());
}
注意,比较是区分大小写的。 因此,tim将导致4个相等的命名用户数。
更新这确实不会考虑列表的顺序。 这不是原始问题,在发布此之前,我错过了评论。 没有订单要求,此答案仍然适用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.