ใช้เมธอด Reverse() ร่วมกับ Take() จาก System.Linq เพื่อดึงองค์ประกอบสุดท้ายของลิสต์มาแสดงในลำดับย้อนกลับ
แนวคิด
Reverse()- กลับลำดับลิสต์ทั้งหมดTake(3)- ดึง 3 องค์ประกอบแรกของลิสต์ที่กลับแล้ว (คือ 3 ตัวสุดท้ายของลิสต์เดิม)
โค้ดตัวอย่างสมบูรณ์
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");
Console.WriteLine("ลิสต์ต้นฉบับ:");
foreach (var item in myList)
Console.WriteLine($" {item}");
// กลับลำดับแล้วดึง 3 ตัวแรก
var lastThreeReversed = myList.Reverse().Take(3);
Console.WriteLine("\n3 องค์ประกอบสุดท้าย (ลำดับย้อนกลับ):");
foreach (var item in lastThreeReversed)
Console.WriteLine($" {item}");
// วิธีทางเลือก: ใช้ Skip และ Take (ไม่ต้อง Reverse ทั้งลิสต์)
var alternative = myList.Skip(Math.Max(0, myList.Count - 3)).Reverse();
Console.WriteLine("\nวิธีทางเลือก (Skip + Reverse):");
foreach (var item in alternative)
Console.WriteLine($" {item}");
}
}
ผลลัพธ์
ลิสต์ต้นฉบับ:
One
Two
Three
Four
3 องค์ประกอบสุดท้าย (ลำดับย้อนกลับ):
Four
Three
Two
วิธีทางเลือก (Skip + Reverse):
Four
Three
Two
การเปรียบเทียบประสิทธิภาพ
| วิธี | คุณ點 | ข้อเสีย |
|---|---|---|
Reverse().Take(n) | เขียนง่าย อ่านง่าย | สร้าง Enumerator ใหม่สำหรับลิสต์ทั้งหมด |
Skip(Count-n).Reverse() | ข้ามไปตรงจุด เร็วกว่าสำหรับลิสต์ใหญ่ | ต้องรู้ Count ก่อน (O(1) สำหรับ List) |
การขยาย: ทำเป็น Extension Method
public static class ListExtensions
{
public static IEnumerable Last(this IList list, int count)
{
if (count <= 0) yield break;
int start = Math.Max(0, list.Count - count);
for (int i = list.Count - 1; i >= start; i--)
yield return list[i];
}
}
// การใช้งาน
var last3 = myList.Last(3); // Four, Three, Two
หมายเหตุ
Reverse()ต้องการusing System.Linq;- สำหรับ
List<T>การเข้าถึงด้วยดัชนี (list[i]) เร็วกว่าการใช้ LINQ - หากลิสต์มีน้อยกว่า 3 รายการ จะได้แค่ที่มีอยู่ (ไม่เกิดข้อผิดพลาด)