如何使用VB.Net仅通过列表索引连接多个列表

如何使用VB.Net仅通过列表索引连接多个列表,vb.net,linq,Vb.net,Linq,在前言中,我看到了一些C#的答案,还有一些是Python的答案。 每个似乎都需要通过循环进行迭代。 随着LINQ的不断进步,我认为必须有一个解决方案 我在VB.net中有三个ArrayList对象。它们是平行的,因为它们总是有相同数量的项目。它们只携带字符串,对于这些项目中的每一项,都没有可以利用的关系 我希望能够使用LINQ,最好是一个JOIN,它允许我创建一个列表(StringTuple),其中每个项都有三个字段,每个字段都是string,表示三个ArrayList对象相对位置中的每个项 我

在前言中,我看到了一些C#的答案,还有一些是Python的答案。
每个似乎都需要通过循环进行迭代。
随着LINQ的不断进步,我认为必须有一个解决方案

我在VB.net中有三个
ArrayList
对象。它们是平行的,因为它们总是有相同数量的项目。它们只携带字符串,对于这些项目中的每一项,都没有可以利用的关系

我希望能够使用LINQ,最好是一个
JOIN
,它允许我创建一个
列表(StringTuple)
,其中每个项都有三个字段,每个字段都是
string
,表示三个
ArrayList
对象相对位置中的每个项

我知道我可以使用索引和
For
For每个
循环遍历
ArrayList
。但这对性能不利。相反,我想在
ArrayList
本身的索引值上连接这三个对象。我在任何地方都找不到这种方法,或者至少有一种方法比在
ArrayList
上迭代n次有显著的改进

注:

我知道
ArrayList
是不可取的。这是遗留代码。如果需要,我可以临时转换为
IEnumerable

作为一个例子,在我的脑海中,我会看到这样的连接和创建:

Dim aList as ArrayList = {'a', 'b', 'c'}
Dim bList as ArrayList = {'1', '2', '3'}
Dim cList as ArrayList = {'#', '*', '!'}

Public Class StringTuple

   Public aType as String
   Public bType as String
   Public cType as String

End Class
(请原谅我的VB。我知道我将如何在C#中这样做。我问这个问题部分是为了学习如何在VB.Net中编写LINQ)


请尝试以下操作:

数据:

类别:

Public Class StringTuple
    Public a_Type As String
    Public b_Type As String
    Public c_Type As String
End Class
问题是

    Dim output1 = From n1 In aList
                  Join n2 In bList On aList.IndexOf(n1) Equals bList.IndexOf(n2)
                  Join n3 In cList On bList.IndexOf(n2) Equals cList.IndexOf(n3)
                  Select New StringTuple With {.a_Type = n1, .b_Type = n2, .c_Type = n3}

好的,很好。这看起来确实应该有效。让我明天在办公室测试一下。谢谢。这是有效的,必须将IEnumerable output1转换为列表。不过我认为@Mary可能是对的。对于10000个项目,使用for循环需要0.0040817秒。使用这种LINQ方法需要1.0324607秒,但LINQ在后台循环。没有性能改进。在迭代查询时设置一个断点,您将看到所有的跳跃。
Public Class StringTuple
    Public a_Type As String
    Public b_Type As String
    Public c_Type As String
End Class
    Dim output1 = From n1 In aList
                  Join n2 In bList On aList.IndexOf(n1) Equals bList.IndexOf(n2)
                  Join n3 In cList On bList.IndexOf(n2) Equals cList.IndexOf(n3)
                  Select New StringTuple With {.a_Type = n1, .b_Type = n2, .c_Type = n3}