2015-06-19 78 views
1

我想dinamycally设置第二个数组维度取决于for循环中的第一个维度。我现在无法为此找到任何文档。如果有人拥有它,我不介意被提到正确的地方。在一个循环中设置一个数组的第二维

Dim array(3,0) As String 
For y As Integer = 0 To array.GetUpperBound(0) - 1 

      <<Set here the second dimension of the array to another dynamic variable 
      (Something Like array(y).dimensionsize = X. Where y is my first dimension argument)>> 

      For i As Integer = 0 To array.GetUpperBound(1) - 1 
       array(y, i) = "something" 
      Next 
     Next 

这可能吗?

编辑:

的情况是,我从AD组成员身份。用户通常有多个帐户。

第一个循环遍历帐户数量,第二个循环遍历每个帐户中的广告组。

UserResult是AD查询结果

这是在开始时的声明,因为它经过一个BackgroundWorker。我需要它是全球性的:

Public Shared UserInfoGroup(1)() As String 

我很感兴趣,我backgroundworker.dowork内的部分:

ReDim UserInfoGroup(UserResult.Count)(1) 

     For y As Integer = 0 To UserResult.Count - 1 

      Dim UserGroupArray As PrincipalSearchResult(Of Principal) = UserResult(y).GetGroups() 
      ReDim UserInfoGroup(UserResult.Count)(UserGroupArray.Count) 
      For i As Integer = 0 To UserGroupArray.Count - 1 
       UserInfoGroup(y)(i) = UserGroupArray(i).ToString() 
      Next 
     Next 

的backgroundworker.completed然后输出数组的形式。

+0

你想让它成为一个锯齿状的数组(每列的列数不同)吗? –

回答

3

如果每一个“Y”比你需要一个交错数组,而不是一个二维数组不同量的“x”。

Dim array(3)() As String 

For y As Integer = 0 To array.GetUpperBound(0) - 1 

    ReDim array(y)(x) 
    ' or 
    ' array(y) = New String(x) {} 

    For i As Integer = 0 To x 
     array(y)(i) = "something" 
    Next 
Next 

更好的选择可能是有一个列表数组。

Dim array(3) As List(Of String)  

For y As Integer = 0 To array.GetUpperBound(0) - 1 

    array(y) = New List(Of String) 

    For i As Integer = 0 To x 
     array(y).Add("something") 
    Next 
Next 
+0

在第一个样本的ReDim之后不应该有一个Preserve? – sblandin

+2

@sblandin没有,因为REDIM只在第二个阵列上完成 –

+0

看起来像最好的解决方案,但我有点难以实现它。 我正在编辑我的帖子来向你显示。 –

0

您可以使用:

Redim Preserve array(3, x) 
+0

感谢您的答案,但它没有按计划工作。它将与来自最后一个循环的那个建立新的联系。 –

+1

在回答关于SO的问题时,请务必解释为什么您的答案有效。这段代码做了什么?它如何回答这个问题?为什么OP会尝试这个而不是原始代码或任何其他答案? –

相关问题