linq lambda 兩個list求交集:根據每一項模糊匹配(contains) 並且帶出where過濾條件裏的值

直接使用 var result = list1.Where(str1 => list2.Contains(str))是不行的,這個要求兩個list的string值必須有相等的纔行 例如list1中有apple,那麼list2中必須有apple才能匹配,而list2中只有app所以匹配不了

 

解決辦法:

List<string> list1 = new List<string> { "apple", "banana", "orange" };
            List<string> list2 = new List<string> { "app", "ban", "ora" ,"test"};

            var result = list1.Where(str1 => list2.Any(str2 => str1.Contains(str2))).Select((x,index)=>new { x,l2=list2[index]}).ToList();

 

這裏select使用了帶index的重載,從而根據index取where條件裏list2中與之對應的值(僅適用於:list1和list2中是1:1的關係,如果是1:N則會錯位導致錯誤,如下圖)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章