2017-06-04 9 views
0

2次元配列の使用VBで同じ配列の新しいインスタンスを作成するにはどうすればよいですか?

Public Shared Cells1 As Boolean(,) 
Public Shared Cells2 As Boolean(,)
どのようにしてCells2をCells1と同じに設定しますか? (したがって、Cells2を変更すると、Cells1は影響を受けません)。は両方の配列を同じインスタンスに設定します。
Cells2 = New Boolean(,) {} 
Cells2 = Cells1
はコードの最初の文字列のように動作します。

これを期待どおりに動作させるにはどうすればよいですか?前もって感謝します。シャローコピーを作成します
〜ニック

+2

:リスト& AddRangeを使用することをお勧めします。あなたが見る選択肢があるかもしれません。プログラミングで何かを達成する唯一の方法はほとんどありません。 –

+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

は深いクローンです。新しいオブジェクトはインスタンス化され、データで埋められる必要があります。あなたは私たちは、あなたが何をしているかを複製できるように、これとあなたのコードの多くをやりたい理由の多くの説明を含める必要が

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 
関連する問題