我如何比较两个列表并创建另一个列表,其中匹配

本文关键字:列表 创建 另一个 两个 何比较 比较 | 更新日期: 2023-09-27 18:06:52

我有以下两个列表:

IEnumerable<bool> a =      True True True False
List<bool> b = True True False False

我需要创建另一个列表,如果列表a和列表b的元素匹配,则显示为true。列表a和b将始终被填充,并且具有相同数量的元素。例如,输出将是:

List<bool> c = True True False True

有简单的方法可以做到这一点吗?我必须使用LINQ吗?我想我可以通过迭代数组来实现但我希望有更简单的方法

我如何比较两个列表并创建另一个列表,其中匹配

如果您使用的是。net 4,您可以使用LINQ通过IEnumerable.Zip将两个列表"压缩"到一起,形成第三个结果列表。Zip对两个列表中的协调元素进行操作,生成第三个列表。

第二个形参是一个函数,它定义了对每对元素要做什么。

var c = a.Zip(b, (p, q) => p == q).ToList();

你可以使用SequenceEquals:

lst1.SequenceEquals(lst2);

如果你需要逐个元素检查,你可以使用Select子句(如果你有不可枚举的列表或数组):

lst1.Select((x,index)=>lst2[index] == x);

有两种方法:

1)如果没有很多数据,只需循环并创建一个新的List

2)实现IEnumerable并创建自己的视图到两个列表(将它们作为构造函数),并实现方法,使它们使用底层列表(即Current: get,在两个列表之间实时进行比较)

使用位操作符,您可以手动编写每个元素进行比较或使用循环。

class Program
{
    static void Main(string[] args)
    {
        IEnumerable<bool> a = new List<bool>() { true, true, true, false };
        List<bool> b = new List<bool>() { true, true, false, false };
        List<bool> answers = new List<bool>();
        for (int i = 0; i < b.Count; i++)
        {
            answers.Add(a.ElementAt<bool>(i) & b.ElementAt<bool>(i));
        }
         foreach (bool B in answers)
            Console.WriteLine(B);
         Console.ReadKey();
     }
 }

这里有一个非常简单的方法,不使用LINQ,但使用老式的for循环:-)

在这种方法中,您必须将IEnumerable<bool>转换为List<bool>,但这是微不足道的。

        IEnumerable<bool> z = new List<bool> { true, true, true, false };
        var a = new List<bool>(z);
        var b = new List<bool> { true, true, false, false };
        var result = new List<bool>();
        for (int i = 0; i < b.Count ; i++) {
            result.Add(a[i] && b[i]);
         }

        foreach (var r in result)
                Console.WriteLine(r);

您可以使用IComparable比较两个列表,并在鬼列表中获得结果。