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

时间:2019-02-26 22:27:20

标签: vb.net linq

首先,我看到一些关于C#的答案,一些关于Python的答案。
每个似乎都需要循环遍历。
与LINQ一样先进,我认为那里必须有解决方案。

我在VB.net中有三个ArrayList对象。它们是并行的,因为它们将始终具有相同数量的项目。它们只带有字符串,而对于每个项目,都没有可以利用的关系。

我希望能够使用LINQ,最好使用JOIN,这将允许我创建一个List(Of StringTuple),其中每个项目都有三个字段,每个字段string分别代表每个项目都位于三个ArrayList对象的相对位置。

我知道我可以使用索引和ArrayListFor循环遍历For Each。但这对性能不利。相反,我想将这三个对象加入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)

Dim query = From a In aList _
            Join b In bList _ 
            On (Index property?) _
            Join c In cList _ 
            On (Index property?) _
            Select New StringTuple With { .aType = a, .bType = b, .cType = c }

1 个答案:

答案 0 :(得分:1)

尝试如下操作:

数据:

Dim aList As New ArrayList({"a", "b", "c"})
Dim bList As New ArrayList({"1", "2", "3"})
Dim cList As New ArrayList({"#", "*", "!"})

班级:

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}