C# Linq以相同顺序将一个列表Map到另一个列表

kq0g1dla  于 2022-12-06  发布在  C#
关注(0)|答案(3)|浏览(225)

我对LINQ非常陌生
下面是我在Linq中努力实现的目标:
我有两个类-List<ClassA>-List<ClassB>
现在,我要将A类的第一个项目Map到B类的第一个项目

ClassA.ForEach( a => {
    // how to get the items from ClassB in the same order as it is in CLass b and assign it to Class A
    });
syqv5f0l

syqv5f0l1#

您是否正在寻找Zip?如果您要枚举配对(listA中的第一个项目,listB中的第一个项目;列表A中的第2个项目,列表B中的第2个项目...列表A中的第n个项目,列表B中的第n个项目):

// a and b are corresponding items from listA and listB
foreach (var (a, b) in listA.Zip(listB, (a, b) => (a, b))) {
  //TODO: relevant code here; a is from listA, b is from listB
}

例如:

List<int> listA = new List<int>() {1, 2, 3};
List<string> listB = new List<string>() {"A", "B", "C"};
    
foreach (var (a, b) in listA.Zip(listB, (a, b) => (a, b)))
{
    Console.WriteLine($"{a} : {b}");
}

输出:

求你了fiddle yourself

qyzbxkaa

qyzbxkaa2#

我会这样做:

List<int> listA = new List<int>();

 List<int> listB = new List<int>();

 listA.Add(1);

 listB.AddRange(listA);

我知道它不是LINQ,但我认为这种方法更简单

dphi5xsq

dphi5xsq3#

您可以Select项目沿着索引,如下所示:

yourList.Select((x, i) => new {element = v, index = i})

然后,您可以应用First,通过index值将它们连接起来:

tempList = list2.Select((x, i) => new { somethingElse = x, index = i });
list1.Select((x, i) => new {
    something = x,
    somethingElse => tempList.First((item) => item.index == i) )
});

我手边没有.NET环境,我也很长一段时间没有在里面工作了,所以如果有错别字,让我知道。

相关问题