6.3.3 字符串連接
? 我已經提到過,與其他語言不同,Object Pascal 完全支持直接字符串連接,這實際上是一個相當快的操作。在本章中,我將向您展示一些字符串連接代碼和一些速度測試。稍后,在第 18 章中,我將簡要介紹 TStringBuilder 類,該類遵循 .NET 表示法,用于從不同片段組合字符串。雖然使用 TStringBuilder 是有原因的,但性能并不是最相關的原因(如以下示例所示)。
? 那么,在Object Pascal中如何連接字符串?我們通過使用+運算符來實現:
varStr1, Str2: string;
beginStr1 := 'Hello,';Str2 := 'world';Str1 := Str1 + ' ' + Str2;
? 請注意,我在賦值的左右兩側都使用了Str1變量,向現有字符串添加更多的內容,而不是賦值給全新的字符串。兩種操作都是可以的,但向現有字符串添加內容是可以獲得更好的良好性能。
? 這種類型的連接也可以在循環中完成,如從LargeString示例中提取的以下代碼:
usesSystem.Diagnostics;constMaxLoop = 2_000_000; // 兩百萬varStr1, Str2: string;I: Integer;T1: TStopwatch;beginStr1 := 'Marco ';Str2 := 'Cantu ';T1 := TStopwatch.StartNew;for I := 1 to MaxLoop doStr1 := Str1 + Str2;T1.Stop;Show('Length: ' + Str1.Length.ToString);Show('Concatenation: ' + T1.ElapsedMilliseconds.ToString);
end;
通過運行此代碼,在Windows虛擬機和Android設備上(計算機要快得多)獲得以下計時:
Windows虛擬機上:
Length: 12000006
Concatenation: 59
Android設備上:
Length: 12000006
Concatenation: 991
? 示例還包含使用TStringBuilder類的類似代碼。雖然我不想詳細說明該代碼(我將在第18章中描述該類),但我想分享實際的計時,與剛剛顯示的普通連接計時進行比較。
Windows虛擬機上:
Length: 12000006
StringBuilder: 79
Android設備上:
Length: 12000006
StringBuilder: 1057
正如您所看到的,連接可以安全地被認為是最快的選項。