如何从 VB.Net 中的二维数组获取一维?
题
我有一个 VBA 应用程序,它为我的 VB.Net dll 提供一个二维变体。它是一个数组,其中每个组件都是另一个包含两个位置的数组。
我想得到这个两位数组。当我使用 VBA 时,我可以通过执行以下操作直接访问每个位置的数据:
dataArray(index, 0) or dataArray(index, 1)
当我想获取两位数组时,我可以使用:
Dim posArray as variant
posArray = dataArray(index)
posArray(0) 包含 dataArray(index, 0),posArray(1) 包含 dataArray(index, 1)。
但是当我使用VB.Net时,我可以直接访问数据,就像第一个例子一样。但是,当我尝试从二维数组中获取一维时(就像我在第二个示例中所做的那样),这是不可能的。
Dim posArray as Object
posArray = dataArray(index)
它显示“尝试对维数不正确的数组进行操作。”
我已经尝试了一切让它发挥作用,我不想一一进行归因,例如:
posArray(0) = dataArray(index, 0)
posArray(1) = dataArray(index, 1)
感谢您的帮助。
解决方案
您会通过需要旋转并产生一维数组自己。有没有在.NET没有图书馆呼吁为你做它。
dim arraySlice as string[yourArrayWidth]
for index = 0 to yourArrayWidth
arraySlice[index] = yourArray[4, index]
next
以上会抓住行4出来yourArray的并粘成arraySlice为你的例子。当然,你会想清理一下,把它变成一个接受的rowIndex作为参数(和垂直拆分接受一个columnIndex另一个函数)的功能。
这一点功能这样,你会在几年收集了到自己的工具库。从现在起5年之后,你就需要一个ArraySlice和你已经有一个函数来做到这一点。
其他提示
Dim Dim1Len As Integer = 5
Dim Dim2Len As Integer = 2
Dim DimToExtract As Integer = 2
Dim inMultiDArr(5, 2) As Integer
inMultiDArr = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}}
Dim outSingleDArr(5) As Integer
outSingleDArr = {0, 0, 0, 0, 0}
Buffer.BlockCopy(inMultiDArr, Marshal.SizeOf(GetType(Integer)) * Dim1Len * (DimToExtract - 1),
outSingleDArr, 0, Marshal.SizeOf(GetType(Integer)) * Dim1Len)
后 BlockCopy
'outSingleDArr' 将包含 { 6, 7, 8, 9, 10 }。以上内容源自 这个帖子.
不隶属于 StackOverflow