4

次のように、コンテンツText.XML.Expat.SAXの追加を繰り返し使用して非常に大きな CDATA ノードを構築するプログラム (を使用する SAX パーサー) があります。Data.TextData.Sequence.(|>)

existingText |> newTextChunk

これにより、タイプ の非常に大きなデータが構築されSeq Textます。

データを構築したら、Seq Text -> Text. しかし、私が試したこの解決策は非常に遅かったです:

Data.Foldable.foldr1 Data.Text.append seqText

テキストのシーケンスをプレーンなテキストデータに変換するより速い方法はありますか?

これを尋ねる別の方法は、テキストのリストを1つのテキストにマージする最も効率的な方法は何[Text] -> Textですか?

4

1 に答える 1

7

appendリスト内のすべての要素に対して新しい配列を作成し、すべてのデータをそれにコピーします。コメントの1つが言ったように、試してみたいかもしれません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これはwith を実行するよりも高速なはずですがappend、検証していません。基準を使用して小さなテスト ケースを作成することもできます (これはすばらしいライブラリです)。

于 2013-06-14T19:33:53.493 に答える