將字符串 "a,b,c,d,e,f,g" 按逗號分割後倒序拼接為 "g,f,e,d,c,b,a"。C# 提供多種實現方式,從基礎數組操作到 LINQ 再到高性能 StringBuilder。
string input = "a,b,c,d,e,f,g";
string[] parts = input.Split(','); // 分割
var sb = new StringBuilder();
for (int i = parts.Length - 1; i >= 0; i--) {
sb.Append(parts[i]);
if (i > 0) sb.Append(','); // 非首個元素前加分隔符
}
string result = sb.ToString(); // "g,f,e,d,c,b,a"
using System.Linq;
string result = string.Join(",", input.Split(',').Reverse());
// 或
string result = string.Join(",", input.Split(',').AsEnumerable().Reverse());
string[] parts = input.Split(',');
Array.Reverse(parts); // 就地反轉
string result = string.Join(",", parts);
// 僅演示思路,實際需手寫解析避免 Split 分配數組
ReadOnlySpan span = input.AsSpan();
// 手寫解析器反向輸出...
// 適用於極高性能場景 (每秒百萬次)
| 方案 | 分配 | 速度 | 可讀性 | 推薦場景 |
|---|---|---|---|---|
| Split + StringBuilder 循環 | 1 個數組 + 1 StringBuilder | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 高性能、熱路徑、舊版 .NET |
| LINQ Reverse + String.Join | 1 數組 + 1 迭代器 + 1 結果字符串 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 業務代碼、現代 .NET、團隊標準 |
| Array.Reverse + String.Join | 1 數組 (就地修改) | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 可修改原數組、追求極致速度 |
// 分割選項:去除空項、Trim 空白
string[] parts = input.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
// 異常輸入處理
string safeResult = string.IsNullOrEmpty(input) ? "" : string.Join(",", input.Split(',').Reverse());
string.Join(",", str.Split(',').Reverse()),一行解決、語義清晰、可維護。RemoveEmptyEntries 處理 "a,,b",TrimEntries (.NET 5+) 處理 "a, b"。
4. 空/Null 防禦:擴展方法封裝 str.ReverseJoin(",") 內部處理 null。
// 擴展方法封裝
public static class StringExtensions {
public static string ReverseJoin(this string input, string separator) {
if (string.IsNullOrEmpty(input)) return "";
return string.Join(separator, input.Split(new[] { separator }, StringSplitOptions.None).Reverse());
}
}
// 使用
"a,b,c".ReverseJoin(","); // "c,b,a"
核心原則:正確性 > 可讀性 > 效能。除非 Profile 證明是瓶頸,否則寫最易讀的 LINQ 版本。