Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

การแสดง 3 องค์ประกอบสุดท้ายของลิสต์ในลำดับย้อนกลับใน C#

ใช้เมธอด Reverse() ร่วมกับ Take() จาก System.Linq เพื่อดึงองค์ประกอบสุดท้ายของลิสต์มาแสดงในลำดับย้อนกลับ

แนวคิด

  1. Reverse() - กลับลำดับลิสต์ทั้งหมด
  2. 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 รายการ จะได้แค่ที่มีอยู่ (ไม่เกิดข้อผิดพลาด)