2017-06-04 82 views
0

使用二維數組:如何在VB中創建同一個數組的新實例?

Public Shared Cells1 As Boolean(,) 
Public Shared Cells2 As Boolean(,)
如何將Cells2等於Cells1但作爲新實例? (所以如果我修改Cells2,Cells1不會受到影響。)
Cells2 = Cells1
將兩個數組設置爲同一個實例,
Cells2 = New Boolean(,) {Cells1}
給我一個語法錯誤,而
Cells2 = New Boolean(,) {} 
Cells2 = Cells1
就像第一個字符串。

我如何才能按預期工作?提前致謝。
〜尼克

+2

您需要包括爲什麼要做到這一點,更多的代碼,以便我們可以複製你在做什麼更多的描述。您可能會看到其他選擇。在編程中很少有一種實現方法。 –

+0

[如何製作我的列表的深層副本]的可能重複(https://stackoverflow.com/questions/37085357/how-to-make-a-deep-copy-of-my-list) - 代碼在我的答案是普遍的,所以它適用於每個可序列化的對象,而無需更改任何內容。 –

回答

0

也許這

Array.Copy(源,目標,destination.length)

,這將創造淺拷貝。這裏的作品:

Module arraycopy 
     Sub Main() 
      Dim xArr(,) As Integer 
      Dim yArr(,) As Integer 
      Dim i, j As Integer 

      ReDim Preserve xArr(10,10) 


      For i = 0 To 10 
       For j = 0 To 10 
        xArr(i,j) = i 
       Next j 
      Next i 

      xArr(0,0) = 42 

      ReDim Preserve yArr(xArr.getLength(0)-1,xArr.getLength(1)-1) 
      Array.Copy(xArr, yArr, yArr.Length) 

      xArr(1,0) = 42 

      For i = 0 To 10 
       For j = 0 To 10 
        Console.WriteLine("Element({0}) = {1}", j, yArr(i,j)) 
       Next j 
      Next i 
      Console.ReadKey() 
     End Sub 
    End Module 

這將工作,考慮到兩個陣列具有相同的尺寸。 或者也許用於/ foreach循環和重寫數組,如果它不是太大?

0

Array.Clone可以使淺表副本:

Cells2 = CType(Cells1.Clone, Boolean(,)) 
0

你需要的是深刻的克隆。一個新的對象需要實例化並填充數據。建議使用名單的AddRange &:

Class payload 
    Dim payloadData as list(Of list(Of Boolean)) 
    Sub new(optional deepCloneFrom as payload = nothing) 
     payloadData = new list(Of list(Of Boolean)) 
     if deepCloneFrom isnot nothing then 
     for i as integer = 0 to deepCloneFrom.count - 1 
     payloadData.add(new list(of Boolean)) 
     payloadData(i).addRange(deepCloneFrom(i)) 
     next 
     end if 
    end sub 
    End Class 
相關問題