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

สลับ String สองตัวโดยไม่ใช้ Temp Variable ใน C#

หลักการ: ใช้ String Concatenation และ Substring

เนื่องจาก String ใน C# เป็น Immutable (ไม่เปลี่ยนแปลงได้) การ "สลับ" จริงๆ คือการสร้าง String ใหม่และกำหนด Reference ใหม่

อัลกอริทึม

  1. str1 = str1 + str2; - รวมสตริงทั้งสอง (str1 = "BradPitt")
  2. str2 = str1.Substring(0, str1.Length - str2.Length); - ตัดส่วนแรกได้ "Brad"
  3. str1 = str1.Substring(str2.Length); - ตัดส่วนท้ายได้ "Pitt"

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

using System;

class Demo {
    public static void Main(String[] args) {
        String str1 = "Brad";
        String str2 = "Pitt";
        
        Console.WriteLine("Strings before swap:");
        Console.WriteLine($"str1 = '{str1}'");
        Console.WriteLine($"str2 = '{str2}'");
        
        // ขั้นตอนที่ 1: รวมสตริง
        str1 = str1 + str2; // "BradPitt"
        
        // ขั้นตอนที่ 2: ตัดส่วนแรกให้ str2 (ความยาว str1 ลบความยาว str2 เดิม)
        str2 = str1.Substring(0, str1.Length - str2.Length); // "Brad"
        
        // ขั้นตอนที่ 3: ตัดส่วนท้ายให้ str1
        str1 = str1.Substring(str2.Length); // "Pitt"
        
        Console.WriteLine("\nStrings after swap:");
        Console.WriteLine($"str1 = '{str1}'");
        Console.WriteLine($"str2 = '{str2}'");
    }
}

ผลลัพธ์

Strings before swap:
str1 = 'Brad'
str2 = 'Pitt'

Strings after swap:
str1 = 'Pitt'
str2 = 'Brad'

วิธีอื่นๆ ที่ดีกว่า (แนะนำ)

1. Tuple Deconstruction (C# 7.0+) - สุดอ่านง่าย

(str1, str2) = (str2, str1); // One line, ทุก Type, อ่านง่ายที่สุด

2. Temp Variable - เข้าใจง่ายที่สุด

string temp = str1;
str1 = str2;
str2 = temp;

3. StringBuilder (ถ้าต้องการ Performance ใน Loop)

var sb = new System.Text.StringBuilder();
sb.Append(str1);
sb.Append(str2);
str2 = sb.ToString(0, str1.Length);
str1 = sb.ToString(str1.Length, str2.Length);

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

วิธี อ่านง่าย ประสิทธิภาพ รองรับ Type แนะนำ
Tuple (a,b)=(b,a) ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ทุก Type ✅ Best
Temp Variable ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ทุก Type ✅ Classic
Concat + Substring ⭐⭐ ⭐⭐ (Alloc 3 Strings) String เท่านั้น ❌ Academic Only

⚠️ ข้อควรระวังของวิธี Concat+Substring

  • สร้าง String Object ใหม่ 3 ตัว (Immutable Nature)
  • ถ้า String ใหญ่ จะกดดัน Garbage Collector
  • Logic ซับซ้อน อ่านยาก Maintain ยาก
  • ทำงานได้เฉพาะ String (ไม่ใช่ Generic)

สรุป

ใน Production Code จริง: ใช้ (str1, str2) = (str2, str1); (C# 7+) หรือ Temp Variable

วิธี Concat+Substring: เป็นเพียง Algorithm Exercise / Interview Question เท่านั้น ไม่ควรใช้ใน Production