Kopiowanie tablic dwuwymiarowych

Kopiowanie obiektów nie jest rzeczą tak oczywistą, jak mogłoby się wydawać. Zanim zapomnę, jak to było, zanotuję sobie kilka użytecznych fragmentów kodu (C#) 🙂

//ręczne kopiowanie:
byte[,] oryginalna = new byte[2, 1];
byte[,] skopiowana = new byte[oryginalna.GetLength(0), oryginalna.GetLength(1)];

oryginalna[0, 0] = 0;
oryginalna[1, 0] = 1;

//kopiowanie przez Array.Copy - odnosi się do już istniejących tablic.
//składnia: Array.Copy(źródło danych, cel danych, długość);
Array.Copy(oryginalna, skopiowana, oryginalna.Length);

//Gdy przy klonowaniu tworzymy nową tablicę:
byte[,] sklonowana = (byte[,])oryginalna.Clone();

Nawet pomimo zmiany elementów tablicy oryginalnej, elementy tablicy skopiowanej (lub sklonowanej) nie ulegną zmianie – gdyż tablica „bytów”;) zawiera elementy proste, a nie referencje (referencje, czyli nie np. obiekt innej klasy).

Dobrze wytłumaczone jest to tu: http://arvangen.wordpress.com/2011/02/18/c-plytkie-i-glebokie-kopie-obiektow-wprowadzenie/oraz tu: http://www.csharp411.com/c-object-clone-wars/, więc nie będę się powtarzać;)

Przydatny wpis? Postaw mi kawę :)

Dodaj komentarz

avatar
  Subscribe  
Powiadom o