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

การกลับลำดับสตริง (Reverse String) ใน C# — เวอร์ชัน Method

บทความนี้เน้นการสร้าง Reusable Method สำหรับ Reverse String

Method Implementation

public static string ReverseString(string input) {
    if (string.IsNullOrEmpty(input)) return input;
    
    char[] chars = input.ToCharArray();
    Array.Reverse(chars);
    return new string(chars);
}

Alternative Implementations

LINQ (สั้น)

public static string ReverseLinq(string input) 
    => string.IsNullOrEmpty(input) ? input : new string(input.Reverse().ToArray());

StringBuilder (ประสิทธิภาพ)

public static string ReverseStringBuilder(string input) {
    if (string.IsNullOrEmpty(input)) return input;
    var sb = new System.Text.StringBuilder(input.Length);
    for (int i = input.Length - 1; i >= 0; i--) {
        sb.Append(input[i]);
    }
    return sb.ToString();
}

Span (C# 7.2+, Zero Allocation สำหรับ In-place)

public static void ReverseInPlace(Span span) {
    for (int i = 0, j = span.Length - 1; i < j; i++, j--) {
        (span[i], span[j]) = (span[j], span[i]);
    }
}

// Usage
string s = "Hello";
ReverseInPlace(s.AsSpan()); // s = "olleH" (Mutates Original!)

ตัวอย่างการใช้งาน Method

using System;

class Program {
    static void Main() {
        string original = "Henry";
        string reversed = ReverseString(original);
        Console.WriteLine($"Original: {original}"); // Henry
        Console.WriteLine($"Reversed: {reversed}"); // ynreH
        
        // Test Edge Cases
        Console.WriteLine(ReverseString(""));       // ""
        Console.WriteLine(ReverseString("A"));      // "A"
        Console.WriteLine(ReverseString("AB"));     // "BA"
        Console.WriteLine(ReverseString(null));     // null
        
        Console.ReadKey();
    }
    
    public static string ReverseString(string input) {
        if (string.IsNullOrEmpty(input)) return input;
        char[] chars = input.ToCharArray();
        Array.Reverse(chars);
        return new string(chars);
    }
}

Benchmark (ประมาณ)

MethodSpeedAllocationsNote
Array.ReverseFast1 Array + 1 StringBalanced
LINQ ReverseMediumMultipleConcise
StringBuilderFastest (Long)1 StringBuilder + 1 StringBest for Long Strings
Span In-placeFastestZero (Mutates)Mutable Context Only

Unicode / Grapheme Clusters

⚠️ Reverse() กลับ Char (UTF-16 Code Units) ไม่ใช่ Grapheme Clusters (User-perceived Characters)

string flag = "👨‍👩‍👧‍👦"; // Family Emoji = Multiple Code Units
// Reverse ด้วย Array.Reverse จะทำลาย Emoji

สำหรับ Unicode จริง ใช้ StringInfo.GetTextElementEnumerator หรือ Library เช่น NodaTime / ICU