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

Lấy 3 phần tử cuối của List và đảo ngược trong C#


Giới thiệu

Kết hợp phương thức Reverse() và Take() trong LINQ để lấy N phần tử cuối cùng của một List và đảo ngược thứ tự của chúng.

Ví dụ cơ bản

Khởi tạo List:

List myList = new List();
myList.Add("One");
myList.Add("Two");
myList.Add("Three");
myList.Add("Four");

Lấy 3 phần tử cuối và đảo ngược:

myList.Reverse().Take(3);

Ví dụ hoàn chỉnh

using System;
using System.Linq;
using System.Collections.Generic;

public class Demo
{
    public static void Main()
    {
        List myList = new List();
        myList.Add("One");
        myList.Add("Two");
        myList.Add("Three");
        myList.Add("Four");

        // Lấy 3 phần tử cuối (Four, Three, Two) và đảo ngược -> Two, Three, Four? 
        // Lưu ý: Reverse() đảo ngược toàn bộ list, sau đó Take(3) lấy 3 phần tử đầu của list đã đảo.
        // List gốc: One, Two, Three, Four
        // Sau Reverse: Four, Three, Two, One
        // Take(3): Four, Three, Two
        var res = myList.Reverse().Take(3);

        foreach (string str in res)
        {
            Console.WriteLine(str);
        }
    }
}

Kết quả

Four
Three
Two

Giải thích logic

  1. List gốc: [One, Two, Three, Four]
  2. Reverse(): [Four, Three, Two, One]
  3. Take(3): [Four, Three, Two]

Cách khác: Dùng Skip + Take

// Lấy 3 phần tử cuối mà không đảo ngược list gốc
var lastThree = myList.Skip(Math.Max(0, myList.Count - 3)).Take(3);
// Kết quả: Three, Four (nếu Count=4, Skip(1) -> Two, Three, Four? Wait)
// Count=4, Skip(1) -> index 1,2,3 -> Two, Three, Four. Take(3) -> Two, Three, Four.
// Để lấy 3 phần tử cuối: Skip(Count - 3) = Skip(1) -> Two, Three, Four.

Lưu ý hiệu suất

  • Reverse() tạo một iterator mới, không sửa đổi list gốc.
  • Với List lớn, Skip(Count - n) hiệu quả hơn vì không cần đảo ngược toàn bộ.
  • Cả hai đều là deferred execution.