首先,我看到一些关于C#的答案,一些关于Python的答案。
每个似乎都需要循环遍历。
与LINQ一样先进,我认为那里必须有解决方案。
我在VB.net中有三个ArrayList
对象。它们是并行的,因为它们将始终具有相同数量的项目。它们只带有字符串,而对于每个项目,都没有可以利用的关系。
我希望能够使用LINQ,最好使用JOIN
,这将允许我创建一个List(Of StringTuple)
,其中每个项目都有三个字段,每个字段string
分别代表每个项目都位于三个ArrayList
对象的相对位置。
我知道我可以使用索引和ArrayList
或For
循环遍历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 }
答案 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}