[英]Compare two list - check if one list contains value of second
我正在嘗試將一個字符串列表(list1)與下一個列表(list2)值(下一個字符串列表)進行比較。 我找到了很多關於序列排序的解決方案,但就我而言,這並不重要。
我的字符串列表將是例如:
List<string> myList1 = new List() {'123', '234','345'}
現在我需要創建一個方法,它將列表“1”作為參數,然后循環(?)通過列表“2”來檢查列表 1 中的值是否在列表 2 中
public bool IsValueInsideTheList(string[] orderNumbersToFindInTheList)
{
//Here I suppose I need to do the looping with foreach/ for to check if value of list1 are in the list2
}
IEnumerable<string> list1;
IEnumerable<string> list2;
// ...
var containsMatches = list1.Any(item => list2.Contains(item));
我在這里使用了IEnumerable<string>
因為這將適用於該類型的任何列表,而不僅僅是List<string>
和string[]
。
您可以使用 LINQ 來實現:
var commonList = list1.Intersect(list2)
編輯
我不確定這是否是您想要的,但無論如何我都會發布。 該算法允許您將列表 1 中的值與列表 2 中的 AHEAD 值進行比較。
示例:列表 1 索引 2 從列表 2 索引 2 與最后一個值進行比較。
即使這不是您所需要的,我希望它可以幫助某人。
using System;
using System.Collections.Generic;
using System.Linq;
namespace ListCompareItems
{
class Program
{
static void Main(string[] args)
{
List<string> myList1 = new List<string>{ "123", "234", "345" };
List<string> myList2 = new List<string> { "987", "123", "345", "112" };
var comparisonLogic = (from item1 in myList1
where (myList2.GetRange(
myList1.IndexOf(item1),
myList2.Count() - 1 - myList1.IndexOf(item1)).ToList().Contains(item1)
)
select item1).ToList();
foreach (var output in comparisonLogic)
Console.WriteLine(output);
}
}
}
輸出:
123
345
附加功能
您可以編輯此算法以返回另一個答案。
如果你想知道是否至少有一個匹配, Count()
比較邏輯。 如果大於 0,則存在匹配。
您可以返回Count()
本身以了解匹配的次數。
您還可以使用Intersect...Any
(可能比Any...Contains
更有效):
bool intersectsWith = list1.Intersect(list2).Any();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.