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

สลับตัวแปรสองตัวในบรรทัดเดียวด้วย C#

วิธีที่ 1: Tuple Deconstruction (C# 7.0+) - แนะนำมากที่สุด

สมัยใหม่ อ่านง่าย เร็ว ปลอดภัย ไม่ต้อง Temp Variable

int a = 30, b = 60;
(a, b) = (b, a); // Swap ในบรรทัดเดียว!

Console.WriteLine($"a={a}, b={b}"); // a=60, b=30

วิธีที่ 2: Bitwise XOR Operator (Classic One-Liner)

ใช้ XOR Swap Algorithm - ไม่ต้อง Temp Variable ทำงานกับ Integer เท่านั้น

int a = 30, b = 60;
a = a ^ b ^ (b = a); // One-liner แบบคลาสสิก

Console.WriteLine($"a={a}, b={b}"); // a=60, b=30

การทำงานของ XOR Swap

// ขั้นตอนแยก (เหมือนกับ One-liner)
a = a ^ b;  // a = 30 ^ 60
b = a ^ b;  // b = (30^60) ^ 60 = 30
a = a ^ b;  // a = (30^60) ^ 30 = 60

วิธีที่ 3: Arithmetic (บวก-ลบ)

int a = 30, b = 60;
a = a + b; // a = 90
b = a - b; // b = 90 - 60 = 30
a = a - b; // a = 90 - 30 = 60

โค้ดตัวอย่างสมบูรณ์

using System;

class Demo {
    public static void Main(String[] args) {
        int val1 = 30;
        int val2 = 60;
        
        Console.WriteLine("Values before swap:");
        Console.WriteLine($"val1 = {val1}, val2 = {val2}");
        
        // วิธีที่ 1: Tuple Deconstruction (Modern C#)
        (val1, val2) = (val2, val1);
        
        Console.WriteLine("\nValues after swap (Tuple):");
        Console.WriteLine($"val1 = {val1}, val2 = {val2}");
        
        // Reset
        val1 = 30; val2 = 60;
        
        // วิธีที่ 2: XOR One-liner
        val1 = val1 ^ val2 ^ (val2 = val1);
        
        Console.WriteLine("\nValues after swap (XOR):");
        Console.WriteLine($"val1 = {val1}, val2 = {val2}");
    }
}

ผลลัพธ์

Values before swap:
val1 = 30, val2 = 60

Values after swap (Tuple):
val1 = 60, val2 = 30

Values after swap (XOR):
val1 = 60, val2 = 30

ตารางเปรียบเทียบ

วิธี รองรับ Type อ่านง่าย ประสิทธิภาพ แนะนำ
Tuple (a,b)=(b,a) ทุก Type ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ✅ Best
XOR One-liner Integer เท่านั้น ⭐⭐ ⭐⭐⭐⭐ Legacy/Embedded
Arithmetic Number Types ⭐⭐⭐ ⭐⭐⭐ ❌ Overflow Risk
Temp Variable ทุก Type ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ✅ Classic Safe

⚠️ ข้อจำกัดของ XOR Swap

  • ทำงานกับ Integer Types เท่านั้น (int, long, short, byte, etc.)
  • ไม่ทำงานกับ Floating Point, Decimal, String, Object
  • ถ้า a และ b อ้างอิงตัวแปรเดียวกัน (ref หรือ Same Variable) จะได้ 0
  • อ่านโค้ดยาก ไม่ใช่ Self-Documenting

สรุปแนะนำ

C# 7.0+: ใช้ (a, b) = (b, a); เสมอ - สะดวก เร็ว อ่านง่าย รองรับทุก Type

C# เก่า: ใช้ Temp Variable - เข้าใจง่าย ปลอดภัย ไม่มีข้อจำกัด

อย่าใช้: Arithmetic/XOR One-liner ใน Production Code (ยกเว้น Embedded Systems)