Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Gộp hai mảng với AddRange trong C#


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ạpGhi chú
List.AddRange + ToArrayO(n+m)2 lần cấp phát (List + Array)
LINQ Concat + ToArrayO(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);