2011-03-29 78 views

回答

2

我认为vb.net不支持这种方式。

如果你有两个IEnumerables,你可以做这样的事情

Using lst1 As IEnumerator(Of X) = List1.GetEnumerator(), 
     lst2 As IEnumerator(Of Y) = List2.GetEnumerator() 

    While lst1 .MoveNext() AndAlso lst2 .MoveNext() 
     If lst1 .Current.Equals(lst2 .Current) Then 
      ''Put here your code. 
     End If 
    End While 
End Using 

为了更好地解释,检查此相关链接:Is it possible to iterate over two IEnumerable objects at the same time?

+0

正确:不。 – 2011-03-29 14:57:06

+0

我想你已经从链接复制了一个答案。但是,相关问题略有不同:它寻求平等的条目。我想你应该删除如果'如果lst1 .Current.Equals(lst2 .Current)然后' – MarkJ 2011-03-29 19:07:41

0

如果他们是你可以做类似的长度相同。 ..

dim i as integer = 0 
do until i = s1.length 
dim s1Value as string = s1(i) 
dim s2Value as string = s2(i) 
i += 1 
loop 
1

在.NET 4中,你可以使用Ziptuples

Sub Main() 
    Dim arr1() As String = {"a", "b", "c"} 
    Dim arr2() As String = {"1", "2", "3"} 
    For Each t In TupleSequence(arr1, arr2) 
     Console.WriteLine(t.Item1 & "," & t.Item2) 
    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 

虽然不如Python好。

-1

我已经研究过相同的问题,但在VB.Net中找不到美丽的编码方式。但是我认为没有必要像Python,Tcl等一样做。所以我只是使用For-Loop,类似于Jack的答案。这也适用于List。

'List1.Count = List2.Count 
For i as Integer = 0 To List1.Count - 1 
     'Work on List1.Item(i) and List2.Item(i) 
Next 
+0

我的猜测是,这不是有效的,因为在古典列表中,每个项目请求将从列表开始走到i元素到访问它。也许.net是为了使这个命令更高效而建立的,但这可能是一种不好的做法。 – 2013-05-17 15:59:56