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

การกลับลำดับ Array (Reverse Array) ใน C#

ใช้ Array.Reverse (Static Method) กลับลำดับ Element ใน Array เดียว (In-place) หรือสร้าง Array ใหม่ด้วย LINQ

1. Array.Reverse (In-place, Standard)

int[] arr = { 9, 32, 87, 45, 77, 56 };
Array.Reverse(arr); // Mutates Original Array
// arr = { 56, 77, 45, 87, 32, 9 }

Overloads

Array.Reverse(arr);           // ทั้ง Array
Array.Reverse(arr, 1, 3);     // Index 1, Count 3 (Partial Reverse)

2. LINQ (สร้าง Array ใหม่, Immutable)

using System.Linq;

int[] original = { 9, 32, 87, 45, 77, 56 };
int[] reversed = original.Reverse().ToArray(); // Original ไม่เปลี่ยน
// reversed = { 56, 77, 45, 87, 32, 9 }

3. Manual Swap (เข้าใจ Algorithm)

void ReverseManual(int[] arr) {
    for (int i = 0, j = arr.Length - 1; i < j; i++, j--) {
        (arr[i], arr[j]) = (arr[j], arr[i]); // Tuple Swap
    }
}

ตัวอย่างครบถ้วน

using System;
using System.Linq;

class Demo {
    static void Main() {
        int[] arr = { 9, 32, 87, 45, 77, 56 };
        
        Console.WriteLine("Original: " + string.Join(", ", arr));
        // 9, 32, 87, 45, 77, 56
        
        // In-place Reverse
        Array.Reverse(arr);
        Console.WriteLine("Reversed (In-place): " + string.Join(", ", arr));
        // 56, 77, 45, 87, 32, 9
        
        // Reset for LINQ Demo
        int[] original = { 9, 32, 87, 45, 77, 56 };
        int[] reversed = original.Reverse().ToArray();
        
        Console.WriteLine("Original (Unchanged): " + string.Join(", ", original));
        Console.WriteLine("Reversed (New Array): " + string.Join(", ", reversed));
        
        // Partial Reverse
        int[] partial = { 1, 2, 3, 4, 5, 6 };
        Array.Reverse(partial, 1, 3); // Index 1, 2, 3
        Console.WriteLine("Partial Reverse: " + string.Join(", ", partial));
        // 1, 4, 3, 2, 5, 6
        
        Console.ReadLine();
    }
}

Multi-dimensional Arrays

Array.Reverse ทำงานกับ 1D Array เท่านั้น สำหรับ 2D+/Jagged ต้อง Loop เอง

// Reverse Rows of 2D Array
int[,] matrix = { {1,2}, {3,4}, {5,6} };
for (int i = 0, j = matrix.GetLength(0) - 1; i < j; i++, j--) {
    for (int k = 0; k < matrix.GetLength(1); k++) {
        (matrix[i, k], matrix[j, k]) = (matrix[j, k], matrix[i, k]);
    }
}

Performance

MethodAllocationsSpeedMutates Original
Array.ReverseNoneFastest✅ Yes
LINQ Reverse().ToArray()New ArrayFast❌ No
Manual LoopNoneFast✅ Yes

สรุป

  • General Purpose: Array.Reverse(array) — เร็วที่สุด, In-place
  • Functional Style: array.Reverse().ToArray() — Immutable, Chainable
  • Partial Reverse: Array.Reverse(array, index, count)