簡體   English   中英

在 Dart 中連接字符串的最有效方法是什么?

[英]What is the most efficient way to concatenate strings in Dart?

Java 等語言允許您使用“+”運算符連接字符串。

但由於字符串是不可變的,如果要重復連接字符串,他們建議使用 StringBuilder 以提高效率。

在 Dart 中連接字符串的最有效方法是什么?

https://api.dart.dev/stable/2.9.1/dart-core/StringBuffer-class.html

StringBuffer can be used for concatenating strings efficiently.

Allows for the incremental building of a string using write*() methods. The strings are concatenated to a single string only when toString is called.

看來,如果使用 StringBuffer,則將性能影響推遲到調用 toString 之前?

有多種連接字符串的方法:

  • String.operator + : string1 + string2 這是最直接的。 但是如果需要拼接很多字符串,重復使用+會創建很多臨時對象,效率很低。 (另請注意,與其他連接方法不同,如果任一參數為null+將引發異常。)

  • 字符串插值: '$string1$string2' 如果您需要連接預先知道的固定數量的字符串(以便您可以使用單個插值字符串),我希望這會相當有效。 但是,如果您需要增量構建一個字符串,這將具有與+相同的低效率。

  • StringBuffer 如果您需要連接很多字符串,這很有效。

  • Iterable.join : [string1, string2].join() 這在內部使用StringBuffer ,因此是等效的。

如果您需要連接少量固定數量的字符串,我會使用字符串插值。 它通常比使用+更具可讀性,尤其是在涉及字符串文字的情況下。 在這種情況下使用StringBuffer會增加一些不必要的開銷。

這是我的理解:

似乎性能會因您的用例而異。 如果您使用 StringBuffer,並打算連接一個非常大的字符串,那么由於連接僅在您調用 toString 時發生,因此您將獲得“性能打擊”。

但是如果你使用“+”,那么每次調用“+”都會對性能造成影響。 由於字符串是不可變的,因此每次連接兩個字符串時,您都會創建一個新的 object,需要對其進行垃圾收集。

因此,答案似乎是測試您的情況,並確定哪個選項有意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM