Bagaimana cara menyalin bagian dari array ke array lain di C #?

144

Bagaimana saya bisa menyalin bagian dari array ke array lain?

Anggap saya mengalami

int[] a = {1,2,3,4,5};

Sekarang jika saya memberikan indeks awal dan indeks akhir array a itu harus disalin ke array lain.

Seperti jika saya memberikan indeks awal sebagai 1 dan indeks akhir sebagai 3, elemen 2, 3, 4 harus disalin dalam array baru.

SyncMaster
sumber

Jawaban:

273
int[] b = new int[3];
Array.Copy(a, 1, b, 0, 3);
  • a = array sumber
  • 1 = indeks awal dalam array sumber
  • b = array tujuan
  • 0 = indeks awal dalam array tujuan
  • 3 = elemen untuk disalin
Marc Gravell
sumber
7
Dengan parameter bernama yang tersedia sekarang, Anda tidak perlu mendokumentasikan salah satu dari 5 parameter.
Hamish Grubijan
11
@ Selamat ya, mungkin. Secara pribadi saya tidak akan menambahkan nama-nama eksplisit kecuali itu membuat kode secara signifikan lebih jelas, dan saya tidak yakin (dalam hal ini) bahwa nama parameter sendiri akan mencapai itu.
Marc Gravell
19

Lihat pertanyaan ini . LINQ Take () dan Skip () adalah jawaban yang paling populer, dan juga Array.CopyTo ().

Metode ekstensi konon lebih cepat dijelaskan di sini .

Pontus Gagge
sumber
1
Pertanyaan lain pada SO dengan jawaban yang sesuai: stackoverflow.com/a/3539065/411428
Manfred
2
Perhatikan bahwa LINQ tidak ideal ketika berhadapan dengan situasi kritis kinerja
XD menghadapi saya
3
int[] a = {1,2,3,4,5};

int [] b= new int[a.length]; //New Array and the size of a which is 4

Array.Copy(a,b,a.length);

Di mana Array adalah kelas yang memiliki metode Salin, yang menyalin elemen array ke b array.

Saat menyalin dari satu array ke array lain, Anda harus memberikan tipe data yang sama ke array lain yang Anda salin.

bajran
sumber
1

Catatan: Saya menemukan pertanyaan ini mencari salah satu langkah dalam jawaban cara mengubah ukuran array yang ada.

Jadi saya pikir saya akan menambahkan informasi itu di sini, kalau-kalau ada orang lain yang mencari cara melakukan salinan berkisar sebagai jawaban parsial untuk pertanyaan mengubah ukuran array.

Bagi siapa pun yang menemukan pertanyaan ini mencari hal yang sama dengan saya, sangat sederhana:

Array.Resize<T>(ref arrayVariable, newSize);

di mana T adalah tipe, yaitu di mana arrayVariable dideklarasikan:

T[] arrayVariable;

Metode itu menangani cek nol, serta newSize == oldSize tidak memiliki efek, dan tentu saja menangani kasus di mana salah satu array lebih panjang dari yang lainnya.

Lihat artikel MSDN untuk lebih lanjut.

Appuris - Paul W
sumber
0

Jika Anda ingin menerapkan metode Array.Copy Anda sendiri .

Metode statis yang merupakan tipe generik.

 static void MyCopy<T>(T[] sourceArray, long sourceIndex, T[] destinationArray, long destinationIndex, long copyNoOfElements)
 {
  long totaltraversal = sourceIndex + copyNoOfElements;
  long sourceArrayLength = sourceArray.Length;

  //to check all array's length and its indices properties before copying
  CheckBoundaries(sourceArray, sourceIndex, destinationArray, copyNoOfElements, sourceArrayLength);
   for (long i = sourceIndex; i < totaltraversal; i++)
     {
      destinationArray[destinationIndex++] = sourceArray[i]; 
     } 
  }

Implementasi metode batas.

private static void CheckBoundaries<T>(T[] sourceArray, long sourceIndex, T[] destinationArray, long copyNoOfElements, long sourceArrayLength)
        {
            if (sourceIndex >= sourceArray.Length)
            {
                throw new IndexOutOfRangeException();
            }
            if (copyNoOfElements > sourceArrayLength)
            {
                throw new IndexOutOfRangeException();
            }
            if (destinationArray.Length < copyNoOfElements)
            {
                throw new IndexOutOfRangeException();
            }
        }
Syed Hameed
sumber