在VB.NET中将一个列表添加到另一个列表中

11
我有一个如下的列表,我想将它添加到另一个列表中:
Dim listRecord As New List(Of String)
listRecord.Add(txtRating.Text)
listRecord.Add(txtAge.Text)
listRace.Add(listRecord)  

如何在VB.Net中实现类似于{{r1,a1},{r2,a2},{r3,a3}}的结果?


你想要 a) 将一个列表附加到另一个列表的末尾,还是 b) 拥有一个每个项目也是一个列表的列表? - Binary Worrier
{{x1,y1,z1},{x2,y2,z2},{x3,y3,z3},{x4,y4,z4},{x5,y5,z5},{x6,y6,z6},{等等}} - Naad Dyr
4
不要使用嵌套列表,而是创建一个表示记录的类,并拥有一个记录的单独列表。虽然需要稍微更多的前期工作,但之后会极大地方便你的生活。 - Meta-Knight
3个回答

13
你可以使用 List 的 AddRange 方法。
listRace.AddRange(listRecord)

或者是 Concat 方法(属于 Enumerable 类):

Dim allItems = listRace.Concat(listRecord)
Dim newList As List(Of String) = allItems.ToList()

如果你想要消除重复项,可以使用Enumerable的Union方法:

Dim uniqueItems = listRace.Union(listRecord)

AddRangeConcat的区别是:

  • Enumerable.Concat 会生成一个新的序列(实际上由于Concat的延迟执行,它不会立即生成序列,更像是一个查询),需要使用ToList从中创建出一个新的列表。
  • List.AddRange 将元素添加到同一List中,因此会修改原始的列表。

嗯,好的。但是稍后我如何在listRecord中读取特定索引处的项?谢谢! - Naad Dyr
@Naad:我不确定我是否正确理解了你的意思。你保留了对listRecord的引用,因此你可以始终通过索引读取项目:Dim item=listRecord(10) - Tim Schmelter
我有一个For循环,在每个循环中,我想将一个列表附加到另一个列表的末尾(在我的情况下是将listRecord附加到listRace),从而获得listRace={{listrecord1},{listrecord2},{listrecord3}}。 - Naad Dyr
@Naad:好的,从你接受的答案中我可以看出你需要嵌套列表。您可以通过外部列表的索引获取对原始列表的引用。listrecord3=listRecord(1)(2)(假设listRace是外部列表中的第二个列表) - Tim Schmelter
我犯了一个错误,listrecord和listRecord是同一个列表 :/ 但是listRecord(x)(y)似乎无法正常工作。 - Naad Dyr

6
我猜你想要嵌套列表,而不仅仅是将一个列表附加到另一个列表的末尾?
Dim listRecord As New List(Of String)
listRecord.Add(txtRating.Text)
listRecord.Add(txtAge.Text)
listRace.Add(listRecord)

Dim records as new List(of List(of String))
records.Add(listRecord)

希望这能有所帮助

更新
读取它们就像访问任何其他列表一样。
要获取第一个记录中的第一个字段

return records(0)(0)

第一条记录中的第二个字段

return records(0)(1)

等等……


好的,它能工作了。但是稍后,我如何读取列表记录中特定索引位置的项?谢谢。 - Naad Dyr

1
我一直在寻找相同的问题,并找到了解决方案。我认为这正是您想要的(将列表项设置为行内,而不是使用List(of())类的函数):
Dim somelist As New List(Of List(Of String)) From {New List(Of String) From {("L1 item1"), ("L1 item2")}, New List(Of String) From {("L2 item1"), ("L2 item2")}}

我承认看起来很复杂,但这就是结构。
为了让代码看起来更简单,我添加了以下屏幕截图显示代码: https://www.dropbox.com/s/lwym7xq7e2wvwto/Capture12.PNG?dl=0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接