我在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)
感谢您的帮助。
答案 0 :(得分:2)
您需要自己旋转并生成1D阵列。在.NET中没有库调用来为你做这件事。
dim arraySlice as string[yourArrayWidth]
for index = 0 to yourArrayWidth
arraySlice[index] = yourArray[4, index]
next
上面的示例将从yourArray中获取第4行并将其粘贴到arraySlice中。当然,您需要清理它并将其放入一个接受rowIndex作为参数的函数(以及另一个垂直拆分接受columnIndex的函数)。
这些功能很少,你会多年来收集到你自己的实用程序库中。从现在起5年后,你需要一个ArraySlice,你已经有了这个功能。
答案 1 :(得分:1)
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}。以上内容源自this post。