2015-06-19 75 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會嘗試這個而不是原始代碼或任何其他答案? –

相關問題