簡體   English   中英

Linq查詢比較2列表 <string> 用於不同的比賽

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM