簡體   English   中英

Scala中的快速子字符串

[英]Fast substring in scala

根據Java的substring()的時間復雜度 ,java的子字符串需要線性時間。 有沒有更快的方法(可能在某些情況下)? 我可能會建議使用迭代器,但是懷疑它也需要O(n)。

val s1: String  = s.iterator.drop(5).mkString

但是迭代器上的多個操作比字符串上的相同操作要快,對嗎?

如果需要編輯很長的字符串,請考慮使用名為Rope的數據結構。

Scalaz庫具有Cord類,它是Rope修改版的實現。

Cord是一種純粹的功能數據結構,用於有效地存儲和處理可能很長的String Rope[Char]非常相似,但是具有更好的恆定因子和更簡單的接口,因為它專門用於String

根據鏈接的問題,由於字符串始終由唯一的字符數組作為后盾,因此substring不能比O(n)快。 您需要復制字符數據。

至於替代方案:至少會有一個運算為O(n)。 在您的示例中,這是mkString ,它在迭代器中收集字符並從中構建字符串。

但是,我不必為此擔心太多。 您正在使用高級語言這一事實​​意味着(應該意味着)對於您的特定任務,開發人員時間比CPU時間更有價值。 substring也是...接受子字符串的規范方法,因此使用它可以使程序更具可讀性。

編輯:我也很喜歡這句話(來自這個答案 ): 如果n不會變大,則O(n)為O(1)。 我要擺脫的是:您不應該編寫效率低下的代碼,但是漸進式效率與實際效率並不相同。

暫無
暫無

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

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