【问题标题】:benefits of Data.TextData.Text 的好处
【发布时间】:2014-03-24 08:37:10
【问题描述】:

与 Haskell 的原生字符串函数相比,导入 Data.Text 有什么好处?

ghci$> drop 3 "abcdefg"
     > "defg"
ghci$> import qualified Data.Text as T
     > T.drop 3 $ T.pack "abcdefg" 
     > "defg"

等等。 Data.Text 提供的许多其他方法(如果不是全部)由标准库提供。此外,要将字符串与 Data.Text 一起使用,我必须将字符串打包/解包到 Text 中。为什么要使用 Data.Text?

【问题讨论】:

  • 当然,当您将文本数据打包/解包到String/从String 打包/解包时,您自然会想要使用Data.Text。当您使用外部数据时会发生这种情况 - 这是大多数程序所做的。
  • 顺便说一句,你不需要明确地打包Text。只需使用{-# LANGUAGE OverloadedStrings #-} 扩展名,然后您可以简单地编写T.drop 3 "abcdefg"

标签: string haskell


【解决方案1】:

Data.Text 更节省空间。 Haskell 原生的String 相当于Chars 的链表,这意味着即使是中等大小的文本块,它也有非常高的空间开销。

Data.Text 通常比String 性能更高。因为String 是一个链表,而Text 是一个内存数组(或惰性变体中的多个内存数组),它提供了更好的内存局部性。 Text 通常可以比 Strings 更有效地与本机系统库(例如 IO)交互,后者需要通过中间缓冲区。对于执行大量 IO(读/写文件)的程序,加速可能是一个数量级或更多。

最后,Data.Text 提供了一些原生 Strings 所不具备的特定于文本的功能。例如,各种大小写折叠和子字符串相关的函数。虽然当然可以提供在Strings 上工作的变体,但由于Text 版本很容易获得,因此几乎没有这样做的动力。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    相关资源
    最近更新 更多