ใช้ 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
| Method | Allocations | Speed | Mutates Original |
|---|---|---|---|
Array.Reverse | None | Fastest | ✅ Yes |
LINQ Reverse().ToArray() | New Array | Fast | ❌ No |
| Manual Loop | None | Fast | ✅ Yes |
สรุป
- General Purpose:
Array.Reverse(array)— เร็วที่สุด, In-place - Functional Style:
array.Reverse().ToArray()— Immutable, Chainable - Partial Reverse:
Array.Reverse(array, index, count)