簡體   English   中英

比較兩個列表 - 檢查一個列表是否包含第二個值

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

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