我有一个程序(一个使用Text.XML.Expat.SAX
的SAX解析器),它使用Data.Text
内容的重复附加来构建非常大的CDATA节点,使用Data.Sequence.(|>)
,如下所示:
existingText |> newTextChunk
这会构建一个非常大的Seq Text
类型的数据。
在我构建数据后,我需要转换Seq Text -> Text
。但我试过的这个解决方案超级慢:
Data.Foldable.foldr1 Data.Text.append seqText
是否有更快的方法将文本序列转换为纯文本数据?
另一种问题的方法可能是,将文本列表合并为一个文本的最有效方法是什么,即[Text] -> Text
?
答案 0 :(得分: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
这应该比使用fold
执行append
更快,但我还没有验证它。您可以尝试使用标准(这是一个了不起的库)来创建一个小测试用例。