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
正如您所看到的,连接可以安全地被认为是最快的选项。