gpt4 book ai didi

c# - Linq for 2 collections simultaneously

转载 作者:行者123 更新时间:2023-11-30 13:36:08 25 4
gpt4 key购买 nike

我有两个列表:

List<A> listA1 = GetFirstList();
List<A> listA2 = GetSecondList();

A类定义

class A
{
public int Id {get; set;}
public DateTime ModifiedDate {get; set;}
public string Type {get; set;}
}

我正在根据以下条件做某事。

List<A> listA1 = GetFirstList();
List<A> listA2 = GetSecondList();
List<A> result = new List<A>();
for(int i = 0; i < listA1; i++)
{
if(listA1[i].ModifiedDate != listA2[i].ModifiedDate)
{
result.Add(listA1[i]);
}
}

假设两个列表都包含相同数量的项目,IdType 的顺序相同。这就是为什么我只检查 ModifiedDate 并且由于项目计数和顺序而自动处理其余部分。

我使用 LINQ 更改了它,如下所示,它工作正常。

var match = ListA1
.Where(a => listA2.First(ct => ct.Id == a.Id).ModifiedDate != a.ModifiedDate);
result.AddRange(match);

但它会遍历 ListA1ListA2 但在第一种情况下它只迭代一次。

我的问题是,我可以通过保留其他集合的索引来执行 LINQ 吗?换句话说,我可以使 LINQ 比现在更优化吗?

最佳答案

您可以使用 Enumerable.Zip通过索引链接两个序列:

List<A> result = listA1.Zip(listA2, (a1, a2) => new { a1, a2 })
.Where(x => x.a1.ModifiedDate != x.a2.ModifiedDate)
.Select(x => x.a1)
.ToList();

即使两个序列都没有实现 IList,这也会起作用/IList<T> , 因此无法通过索引访问项目。

关于c# - Linq for 2 collections simultaneously,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38483631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com