String.Join 文檔 StringBuilder 文檔
這兩天刷 Leedcode 做到一道 String 的題時突然想到這倆對比的問題,於是查了一下資料並簡單對比了一下。
首先對於 151. Reverse Words in a String 這道題而言,對比提交結果如下:
明顯 StringBuilder 更快,並且更省內存。
// Join public static string ReverseWords(string s) { var sArr = s.Split(' '); var joinStr =""; for (var i = sArr.Count() - 1; i >= 0; i--) { if (sArr[i].ToString() != "") { joinStr = string.Join(" ", joinStr, sArr[i]); } } return joinStr.Trim(); } // StringBuilder public string ReverseWords2(string s) { var sArr = s.Split(' '); var sb = new StringBuilder(); for (var i = sArr.Count() - 1; i >= 0; i--) { if (sArr[i].ToString() != "") { sb.Append(sArr[i]); if (i != 0) sb.Append(" "); } } return sb.ToString().Trim(); }
那么什么情況下Join會更快呢?
答: 在你已經有一個字符串數組,並且要以分隔符合並的情況下, Join 是最快的方法。 也就是 : Join(String, String[]) 的方法。
當然了,無論這兩種方法用哪一種,肯定都是優於 "string1" + " " + "string2" 這樣直接又粗暴的方式的。
具體證明和更多討論請參考: https://stackoverflow.com/questions/585860/string-join-vs-stringbuilder-which-is-faster