我如何比较两个列表并创建另一个列表,其中匹配
本文关键字:列表 创建 另一个 两个 何比较 比较 | 更新日期: 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
使用位操作符,您可以手动编写每个元素进行比较或使用循环。
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比较两个列表,并在鬼列表中获得结果。