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