วิธีที่ 1: ใช้ตัวแปรชั่วคราว (Temp Variable) - แนะนำมากที่สุด
int a = 100;
int b = 200;
int temp = a;
a = b;
b = temp;
// ผลลัพธ์: a=200, b=100
วิธีที่ 2: ไม่ใช้ตัวแปรชั่วคราว (Arithmetic)
ใช้คณิตศาสตร์พื้นฐาน สะดวกแต่อาจเกิด Overflow ได้
int a = 100;
int b = 200;
a = a + b; // a = 300
b = a - b; // b = 300 - 200 = 100
a = a - b; // a = 300 - 100 = 200
// ผลลัพธ์: a=200, b=100
วิธีที่ 3: ใช้ Bitwise XOR (ไม่ใช้ Temp, ไม่ Overflow)
เหมาะสำหรับ Integer เท่านั้น
int a = 100;
int b = 200;
a = a ^ b;
b = a ^ b; // b = (a^b)^b = a
a = a ^ b; // a = (a^b)^a = b
// ผลลัพธ์: a=200, b=100
วิธีที่ 4: One-Liner XOR (บรรทัดเดียว)
a = a ^ b ^ (b = a); // คลาสสิค แต่อ่านยาก
วิธีที่ 5: Tuple Deconstruction (C# 7.0+) - สวยที่สุด
(a, b) = (b, a); // Swap ในบรรทัดเดียว อ่านง่าย ไม่ต้อง Temp!
โค้ดตัวอย่างสมบูรณ์
using System;
namespace SwapDemo {
class Program {
static void Main(string[] args) {
int val1 = 100, val2 = 200;
Console.WriteLine("Before Swap:");
Console.WriteLine($"val1 = {val1}, val2 = {val2}");
// วิธีที่ 5: Tuple Deconstruction (แนะนำ)
(val1, val2) = (val2, val1);
Console.WriteLine("\nAfter Swap (Tuple):");
Console.WriteLine($"val1 = {val1}, val2 = {val2}");
// รีเซ็ต
val1 = 100; val2 = 200;
// วิธีที่ 3: XOR
val1 = val1 ^ val2;
val2 = val1 ^ val2;
val1 = val1 ^ val2;
Console.WriteLine("\nAfter Swap (XOR):");
Console.WriteLine($"val1 = {val1}, val2 = {val2}");
Console.ReadKey();
}
}
}
ตารางเปรียบเทียบวิธีการ Swap
| วิธี | ความเข้าใจง่าย | ประสิทธิภาพ | ข้อจำกัด | แนะนำ |
|---|---|---|---|---|
| Temp Variable | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ไม่มี | ✅ Best Overall |
| Arithmetic | ⭐⭐⭐ | ⭐⭐⭐ | Overflow Risk | ❌ ไม่แนะนำ |
| XOR | ⭐⭐ | ⭐⭐⭐⭐ | Integer เท่านั้น | ⚠️ Special Cases |
| Tuple (C# 7+) | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ต้อง C# 7.0+ | ✅ Modern Best |
สรุป
- สมัยใหม่ (C# 7+): ใช้
(a, b) = (b, a);- อ่านง่าย เร็ว ปลอดภัย - รุ่นเก่า: ใช้ Temp Variable - เข้าใจง่ายที่สุด
- Embedded/Systems: XOR อาจใช้ได้ (ประหยัด Register)
- หลีกเลี่ยง: Arithmetic Method (Overflow Risk)