4

我有一个程序(使用 SAX 解析器Text.XML.Expat.SAX)使用重复的内容附加来构建非常大的 CDATA 节点Data.Text,使用Data.Sequence.(|>)如下:

existingText |> newTextChunk

这建立了一个非常大的类型数据Seq Text

建立数据后,我需要转换Seq Text -> Text. 但是我尝试的这个解决方案非常慢:

Data.Foldable.foldr1 Data.Text.append seqText

有没有更快的方法将文本序列转换为纯文本数据?

问这个问题的另一种方法可能是,将文本列表合并到一个文本中的最有效方法是什么,即[Text] -> Text

4

1 回答 1

7

append将为列表中的每个元素创建一个新数组,并将所有数据复制到其中。正如其中一条评论所说,您可能想尝试一下concat。对于序列,您可以尝试执行以下操作:

import Data.Foldable (toList)
import Data.Sequence (Seq)
import qualified Data.Sequence as S
import Data.Text (Text)
import qualified Data.Text as T

concatSeq :: Seq Text -> Text
concatSeq = T.concat . toList

这应该比做 a foldwith更快append,但我还没有验证它。您可以尝试使用标准(这是一个了不起的库)创建一个小测试用例。

于 2013-06-14T19:33:53.493 回答