Giới thiệu
Sử dụng List<T>.AddRange() để gộp (merge) hai mảng: thêm tất cả phần tử của mảng 1, sau đó mảng 2 vào List, rồi chuyển về mảng bằng ToArray().
Ví dụ cơ bản
int[] arr1 = { 15, 20, 27, 56 };
int[] arr2 = { 62, 69, 76, 92 };
var myList = new List();
myList.AddRange(arr1);
myList.AddRange(arr2);
int[] arr3 = myList.ToArray();
Ví dụ hoàn chỉnh
using System;
using System.Collections.Generic;
class Demo
{
static void Main()
{
int[] arr1 = { 15, 20, 27, 56 };
int[] arr2 = { 62, 69, 76, 92 };
Console.WriteLine("Array 1...");
foreach (int ele in arr1) Console.WriteLine(ele);
Console.WriteLine("Array 2...");
foreach (int ele in arr2) Console.WriteLine(ele);
var myList = new List();
myList.AddRange(arr1);
myList.AddRange(arr2);
int[] arr3 = myList.ToArray();
Console.WriteLine("Merged array..");
foreach (int res in arr3) Console.WriteLine(res);
}
}
Kết quả
Array 1... 15 20 27 56 Array 2... 62 69 76 92 Merged array.. 15 20 27 56 62 69 76 92
Các cách gộp mảng khác
- LINQ Concat:
int[] arr3 = arr1.Concat(arr2).ToArray();(khuyên dùng, ngắn gọn) - Array.Copy: Cấp phát mảng mới, copy 2 lần (nhanh nhất cho mảng lớn).
- Span/Memory (.NET Core):
var dst = new int[arr1.Length + arr2.Length]; arr1.CopyTo(dst); arr2.CopyTo(dst.AsSpan(arr1.Length));
So sánh hiệu suất
| Phương pháp | Độ phức tạp | Ghi chú |
|---|---|---|
| List.AddRange + ToArray | O(n+m) | 2 lần cấp phát (List + Array) |
| LINQ Concat + ToArray | O(n+m) | 1 lần cấp phát, code ngắn |
| Array.Copy (manual) | O(n+m) | 1 lần cấp phát, nhanh nhất, verbose |
Lưu ý
- AddRange chấp nhận bất kỳ IEnumerable<T>.
- Shallow copy cho kiểu tham chiếu.
- Có thể gộp nhiều mảng:
list.AddRange(arr1); list.AddRange(arr2); list.AddRange(arr3);