Apakah ada fungsi built in. NET 2.0 yang akan mengambil dua array dan menggabungkannya menjadi satu array?
Array keduanya memiliki tipe yang sama. Saya mendapatkan array ini dari fungsi yang banyak digunakan dalam basis kode saya dan tidak dapat memodifikasi fungsi untuk mengembalikan data dalam format yang berbeda.
Saya ingin menghindari menulis fungsi saya sendiri untuk menyelesaikan ini jika memungkinkan.
Array.Resize
sebenarnya tidak mengubah ukuran array, itu menyalinnya. Itu sebabnya parameter pertama adalah by-ref (yang berarti kode pertama Anda mungkin tidak akan dikompilasi).Di C # 3.0 Anda dapat menggunakan metode Concat LINQ untuk melakukannya dengan mudah:
Di C # 2.0 Anda tidak memiliki cara langsung, tetapi Array.Copy mungkin solusi terbaik:
Ini dapat dengan mudah digunakan untuk mengimplementasikan versi Anda sendiri
Concat
.sumber
Gunakan LINQ :
Perlu diingat, ini akan menghapus duplikat. Jika Anda ingin menyimpan duplikat, gunakan Concat.
sumber
Jika Anda tidak ingin menghapus duplikat, coba ini
Gunakan LINQ:
sumber
Pertama, pastikan Anda bertanya pada diri sendiri pertanyaan "Haruskah saya benar-benar menggunakan Array di sini"?
Kecuali jika Anda sedang membangun sesuatu di mana kecepatan adalah yang paling penting, Daftar yang diketik, seperti
List<int>
mungkin adalah cara untuk pergi. Satu-satunya waktu saya pernah menggunakan array adalah untuk byte array ketika mengirim barang melalui jaringan. Selain itu, saya tidak pernah menyentuh mereka.sumber
List<T>
di API publik: blogs.msdn.com/b/kcwalina/archive/2005/09/26/474010.aspxLebih mudah hanya menggunakan LINQ :
Pertama-tama konversikan array ke daftar dan gabungkan mereka ... Setelah itu konversikan daftar kembali menjadi sebuah array :)
sumber
Saya pikir Anda dapat menggunakan Array . Salin untuk ini. Dibutuhkan indeks sumber dan indeks tujuan sehingga Anda harus dapat menambahkan satu array ke array lainnya. Jika Anda perlu lebih rumit daripada hanya menambahkan satu ke yang lain, ini mungkin bukan alat yang tepat untuk Anda.
sumber
Dengan asumsi array tujuan memiliki cukup ruang,
Array.Copy()
akan berfungsi. Anda mungkin juga mencoba menggunakan aList<T>
dan.AddRange()
metodenya.sumber
Secara pribadi, saya lebih suka Ekstensi Bahasa saya sendiri, yang saya tambahkan atau hapus sesuka hati untuk pembuatan prototipe cepat.
Berikut ini adalah contoh untuk string.
Ini jauh lebih cepat daripada LINQ dan Concat. Lebih cepat lagi, menggunakan custom
IEnumerable
Type-wrapper yang menyimpan referensi / pointer dari array yang dilewati dan memungkinkan perulangan seluruh koleksi seolah-olah itu adalah array normal. (Berguna dalam HPC, Pemrosesan Grafik, Pembuatan grafik ...)Kode Anda:
Untuk keseluruhan kode dan versi generik, lihat: https://gist.github.com/lsauer/7919764
Catatan: Ini mengembalikan objek IEnumerable tanpa ekstensi. Untuk mengembalikan objek yang diperluas sedikit lebih lambat.
Saya mengkompilasi ekstensi tersebut sejak 2002, dengan banyak kredit akan membantu orang-orang di CodeProject dan 'Stackoverflow'. Saya akan segera merilis ini dan meletakkan tautannya di sini.
sumber
Semua orang sudah memiliki pendapat mereka tetapi saya pikir ini lebih mudah dibaca daripada pendekatan "gunakan sebagai metode Extension":
Namun itu hanya dapat digunakan saat menyatukan 2 array.
sumber
Inilah yang saya pikirkan. Berfungsi untuk sejumlah array.
...
sumber
Untuk mencatatnya sebagai opsi: jika array yang Anda gunakan memiliki tipe primitif - Boolean (bool), Char, SByte, Byte, Int16 (pendek), UInt16, Int32 (int), UInt32, Int64 (panjang ), UInt64, IntPtr, UIntPtr, Single, atau Double - maka Anda bisa (atau harus?) Mencoba menggunakan Buffer.BlockCopy . Menurut halaman MSDN untuk kelas Buffer :
Menggunakan contoh C # 2.0 dari jawaban @ OwenP sebagai titik awal, ini akan berfungsi sebagai berikut:
Hampir tidak ada perbedaan dalam sintaksis antara
Buffer.BlockCopy
danArray.Copy
yang @OwenP gunakan, tetapi ini harus lebih cepat (bahkan jika hanya sedikit).sumber
Jika ada orang lain yang mencari cara menggabungkan dua array byte gambar:
sumber
Berikut adalah contoh sederhana menggunakan Array.CopyTo. Saya pikir itu menjawab pertanyaan Anda dan memberikan contoh penggunaan CopyTo - Saya selalu bingung ketika saya perlu menggunakan fungsi ini karena bantuannya agak tidak jelas - indeks adalah posisi di array tujuan di mana penyisipan terjadi.
Saya kira Anda tidak bisa membuatnya lebih sederhana.
sumber
Saya membutuhkan solusi untuk menggabungkan jumlah array yang tidak diketahui.
Heran tidak ada lagi yang memberikan solusi menggunakan
SelectMany
denganparams
.Jika Anda tidak ingin item yang berbeda, hapus saja yang berbeda.
Catatan: Pasti tidak ada jaminan pemesanan saat menggunakan berbeda.
sumber
Saya berasumsi Anda menggunakan tipe array Anda sendiri sebagai lawan dari .NET array:
Cara lain untuk melakukan ini adalah dengan menggunakan kelas ArrayList bawaan.
Kedua contoh adalah C #.
sumber
Menggunakan kode di atas dua Array dapat dengan mudah digabungkan.
sumber
Dibuat dan metode ekstensi untuk menangani null
sumber
Jika Anda memiliki array sumber di dalam array itu sendiri, Anda dapat menggunakan SelectMany :
memberi
Mungkin ini bukan metode tercepat tetapi mungkin cocok tergantung pada usecase.
sumber
Kode ini akan berfungsi untuk semua kasus:
sumber
Coba ini:
sumber