如何从VB.Net中的二维数组中获取一个维度?

时间:2010-02-26 18:48:12

标签: arrays vb.net dimension

我在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)

感谢您的帮助。

2 个答案:

答案 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