提问人:sickboy 提问时间:7/1/2023 最后编辑:sickboy 更新时间:7/5/2023 访问量:104
VB.NET 动态多维集合
VB.NET dynamic multi dimensional collections
问:
你们中的某个人可能知道我是 vb.net 的初学者,所以我会问你一个建议。
在 VBA 中(我知道这是一种完全不同的语言),我的解决方法通常包括数组,我可以在代码中间编辑它们,例如
Dim myArray() as String
然后修改它
Redim Preserve (newDimension1, newDimension2)
但是在 VB.NET 中,我只能编辑最右边的维度,这限制了我经常使用数组的目的。 我发现 ArrayLists 默认是动态的,所以我可以通过简单地使用 .add 或 .remove 来“扩展”它们,它完全符合我的需求,但我读到我不能添加多个维度(如果我没记错的话)。
我也对列表(不允许多个维度)和 KeyValuePairs 有所了解,它们根本不是动态的,只使用 2 个维度。
我知道这对你们中的许多人来说可能听起来太笼统了,但在这种情况下,哪些系列最适合我的需求?有没有某种多维动态列表/数组/不知道是什么?
感谢大家的回答和理解。
编辑
尽管您的所有答案都非常有趣(Olivier 的答案在处理动态变量的名称时非常有用),但似乎 vb 在其集合中显示了一个限制。
关于目的,它是通用的,因为数组(以及一般的集合)经常在 OOL 中使用,每个人都将其用于自己的范围。
我个人使用它的原因之一是“存储”数据 - 例如 Excel 范围。
大家建议不要使用这种经典方法
dim myArray as Object(,) = CType(xlRange.Value, Object(,))
它确实产生了一个 2d 数组,但作为回报,它在效率和转换为其他对象方面也有自己的问题,所以我想知道是否存在一种“更干净”的方法,可以在未知维度的情况下以更优雅的方式产生相同的结果(我并不是真的喜欢量身定制的一次性功能)。
再次感谢您抽出时间接受采访!
答:
您可以创建一个 .但是,您必须为外部列表的每个条目创建内部列表。与数组不同,数组在创建数组后可以访问数组中的每个位置,您必须首先向列表中添加项目以使其增长。List(Of List(Of String))
' Create the list
Dim list = new List(Of List(Of String))()
' Add an empty inner list to the outer list
list.Add(new List(Of String)())
' Add elements to this inner list
list(0).Add("hello")
list(0).Add("world")
' Add a second inner list with a collection initializer
list.Add(New List(Of String) From {"aaa", "bbb", "ccc"})
' Access an element
Dim s As String = list(1)(2) ' = "ccc"
但您也可以组合其他类型的集合。例如,您可以创建一个数组的数组,也称为锯齿状数组,它与 2D 数组不同。或者,您可以创建列表数组或数组列表。
您甚至可以创建一个以元组为键的字典。当只有少数索引头寸被占用时,这尤其有利。
Dim dict As New Dictionary(Of (Integer, Integer), String)()
dict((0, 0)) = "hello"
dict((0, 1)) = "world"
dict((1, 0)) = "aaa"
dict((1, 1)) = "bbb"
dict((1, 2)) = "ccc"
Dim s As String = dict((1, 2)) ' = "ccc"
在 .NET 中,对如何组合类型几乎没有限制。
评论