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

Lấy phạm vi phần tử (GetRange) trong List C#


Giới thiệu

Phương thức GetRange(int index, int count) của List<T> trả về một List mới chứa count phần tử bắt đầu từ index (shallow copy).

Ví dụ cơ bản

List arr1 = new List { 10, 20, 30, 40, 50 };
List myList = arr1.GetRange(1, 3); // Index 1, lấy 3 phần tử: 20, 30, 40

Ví dụ hoàn chỉnh

using System;
using System.Collections.Generic;

public class Demo
{
    public static void Main()
    {
        List arr1 = new List { 10, 20, 30, 40, 50 };
        Console.WriteLine("Initial List ...");
        foreach (int i in arr1) Console.WriteLine(i);

        Console.WriteLine("Getting elements between a range...");
        List myList = arr1.GetRange(1, 3);
        foreach (int res in myList) Console.WriteLine(res);
    }
}

Kết quả

Initial List ...
10
20
30
40
50
Getting elements between a range...
20
30
40

Tham số và ngoại lệ

  • index: Chỉ số bắt đầu (0-based). Phải >= 0 và < Count.
  • count: Số phần tử. Phải >= 0 và index + count <= Count.
  • Ném ArgumentOutOfRangeException nếu tham số không hợp lệ.

So sánh với LINQ Skip/Take

Phương phápTrả vềHiệu suấtGhi chú
GetRange(index, count)List<T>Nhanh (copy block)Chỉ List, sửa đổi list con không ảnh hưởng gốc (shallow copy)
Skip(index).Take(count).ToList()List<T>Chậm hơn (iterator)Áp dụng cho mọi IEnumerable
list[index..(index+count)] (C# 8+)Span<T> / T[]Rất nhanhChỉ mảng, không phải List

Lưu ý

  • Shallow copy: với kiểu tham chiếu, cả hai list chia sẻ cùng đối tượng.
  • Để deep copy, cần clone từng phần tử.
  • Dùng list.AsSpan()[index..(index+count)] (NET Core 2.1+) cho hiệu suất cao không cấp phát.