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

สลับค่าตัวเลขสองตัวใน C# (Swap Two Numbers)

วิธีที่ 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)