如何同时循环两个列表?

我在下面提到了以下问题:使用foreach循环迭代两个列表。关于所选择的答案,我的问题是这个:o.DoSomething可以进行比较吗?如:
For Each a in ListA.Concat(ListB)
    If(a from ListA=a from ListB) Then
        Do Something here
    End If
Next
正如您可能已经猜到的那样,我正在使用VB.Net,并想知道我如何能够完成我在此处展示的内容。这基本上是单独/独立地遍历连接列表。谢谢!     
已邀请:
你的问题表明你需要一个
Join
操作,因为你不是想要迭代两个列表,但你也希望将一个列表中的相同项目匹配到另一个列表。
    Dim joinedLists = From item1 In list1 _
                    Join item2 In list2 _
                    On item1.Bar Equals item2.Bar _
                    Select New With {item1, item2}

    For Each pair In joinedLists
        'Do work on combined item here'
        'pair.item1'
        'pair.item2'
    Next
其他答案推荐
Zip
。这只是一个函数,它接受两个序列并产生一个结果,就像连接一样,但它适合在两个列表的FIFO方法中工作。如果您需要基于相等的连接,
Join
是专门为此工作而构建的正确工具。     
我的问题的答案是 - 可能 - 在同一时间迭代 - 超过两个 - 可数对象可能有所帮助
  Dim listA As List(Of A)
            Dim listb As List(Of B)

            listA.Zip(listb, Function(a, b) a.property1 = b.property1).ForEach(AddressOf Print)   


Shared Sub Print(ByVal s As A)
    Console.WriteLine(s.Property1)
End Sub
    
在.Net 4中你可以使用Zip。改编自我对Python问题的答案,专门询问元组 - 如果你愿意,你可以删除元组。
Sub Main()
    Dim arr1() As String = {"a", "b", "c"} '' will also work with Lists
    Dim arr2() As String = {"1", "2", "3"}
    For Each t In TupleSequence(arr1, arr2)
        If t.Item1 = t.Item2 Then
          '' Do something
        End If
    Next
    Console.ReadLine()
End Sub
Function TupleSequence(Of T1, T2)(
    ByVal seq1 As IEnumerable(Of T1),
    ByVal seq2 As IEnumerable(Of T2)
    ) As IEnumerable(Of Tuple(Of T1, T2))
    Return Enumerable.Zip(seq1, seq2, 
      Function(s1, s2) Tuple.Create(s1, s2)
    )
End Function
    
解决方案是使用包含第二个列表中项目的字典,然后遍历第一个列表并使用字典检索第二个列表中的相应项目。这是一个例子,假设您想要将项目与ID属性进行比较:
Dim DictB = ListB.ToDictionary(Function(x) x.ID)
For each itemA in ListA
    If DictB.ContainsKey(itemA.ID)
        'Item is in both lists
        Dim itemB = DictB(itemA.ID)
        'Do something here
    End If
Next
    

要回复问题请先登录注册