ภาพรวม
ใน C# ไม่มีเมธอด SortDescending ตรงๆ แต่สามารถจัดเรียงจากมากไปน้อยได้โดย:
- เรียงจากน้อยไปมากด้วย
Array.Sort() - กลับลำดับด้วย
Array.Reverse()
ตัวอย่างโปรแกรม
using System;
namespace Demo
{
public class MyApplication
{
public static void Main(string[] args)
{
int[] list = { 98, 23, 97, 36, 77 };
Console.WriteLine("Original Unsorted List");
foreach (int i in list)
Console.Write(i + " ");
// 1. เรียงน้อยไปมาก
Array.Sort(list);
// 2. กลับลำดับ = มากไปน้อย
Array.Reverse(list);
Console.WriteLine("\nSorted List (Descending)");
for (int i = 0; i < list.Length; i++)
Console.Write(list[i] + " ");
}
}
}ผลลัพธ์
Original Unsorted List 98 23 97 36 77 Sorted List (Descending) 98 97 77 36 23
วิธีอื่นๆ ในการจัดเรียง Descending
1. ใช้ LINQ OrderByDescending (ไม่เปลี่ยนอาร์เรย์เดิม)
using System.Linq;
int[] list = { 98, 23, 97, 36, 77 };
int[] sorted = list.OrderByDescending(x => x).ToArray();
// sorted = [98, 97, 77, 36, 23]
// list ยังคงเป็น [98, 23, 97, 36, 77]2. ใช้ Comparison Delegate กับ Array.Sort
Array.Sort(list, (a, b) => b.CompareTo(a)); // Descending // หรือ Array.Sort(list, Comparer.Create((a, b) => b - a));
3. ใช้ IComparer Custom Class
public class DescendingComparer : IComparer{ public int Compare(int x, int y) => y.CompareTo(x); } // ใช้งาน Array.Sort(list, new DescendingComparer());
4. สำหรับ List<T>
Listlist = new List { 98, 23, 97, 36, 77 }; list.Sort(); // Ascending list.Reverse(); // Descending // หรือ list.Sort((a, b) => b.CompareTo(a)); // Descending โดยตรง
ตัวอย่างกับ String Array
string[] names = { "Charlie", "Alice", "Bob", "David" };
Array.Sort(names); // Alphabetical: Alice, Bob, Charlie, David
Array.Reverse(names); // Reverse: David, Charlie, Bob, Alice
// หรือ Descending โดยตรง
Array.Sort(names, (a, b) => string.Compare(b, a));
// David, Charlie, Bob, Aliceข้อสังเกตสำคัญ
Array.Sort + Array.Reverseเร็วที่สุดและ Memory Efficient (In-place)Array.Reverseเป็น O(n) เพิ่มเติม - รวม O(n log n) + O(n) ≈ O(n log n)- LINQ
OrderByDescendingสร้างอาร์เรย์ใหม่ (O(n) Space) - ใช้เมื่อต้องการเก็บต้นฉบับไว้ - สำหรับ Custom Type ต้อง Implement
IComparable<T>หรือส่งIComparer<T> - Sort เป็น Unstable (ยกเว้นการใช้ LINQ OrderBy ที่ Stable)