![]() |
1
30
在haskell中使用字符串的最佳实践基本上是:使用data.bytestring/data.bytestring.lazy。 http://hackage.haskell.org/packages/archive/bytestring/latest/doc/html/
就Haskell中默认字符串实现的效率而言,它不是。各
自从A
而一个
即使是像在字符串前面做准备这样的操作,也不太可能
|
![]() |
3
7
答案比“使用懒惰的字节串”要复杂一些。
也就是说,如果您需要性能,并且您可以纯粹用字节字符串表示数据,那么就这样做。 |
![]() |
4
6
给出的基本答案(使用bytestring)是正确的。也就是说,我之前的三个答案都不准确。
关于UTF-8:这是否会成为一个问题完全取决于您对字符串进行何种处理。如果您只是简单地将它们视为单个数据块(其中包括连接等操作,但不包括拆分),或者执行某些有限的基于字节的操作(例如,以字节为单位查找字符串的长度,而不是以字符为单位的长度),则不会有任何问题。如果您正在使用i18n,那么有足够多的其他问题可以简单地使用
在字节串前面预处理单个字节可能比为字符串做相同的操作要贵。然而,如果你做了很多这样的事情,你可能会找到更便宜的方法来解决你的问题。 但最终的结果是,对于最初问题的海报:是的,字符串在haskell中效率很低,尽管非常方便。如果您担心效率问题,请使用字节串,并根据您的目的(ASCII/ISO-8859-1对Unicode的某种类型,或只是任意的二进制数据)将它们视为char8或word8的数组。一般来说,使用懒惰的字节串(在字符串开始前的预处理实际上是一个非常快速的操作),除非您知道为什么需要非懒惰的字节串(这通常是为了感谢懒惰评估的性能方面)。 值得一提的是,我正在哈斯克尔建立一个完全自动化的交易系统,我们需要做的一件事就是快速解析通过网络连接接收到的市场数据馈送。我可以用一个可忽略的CPU处理每秒300条消息的读取和解析;就处理这些数据而言,ghc编译的haskell的性能与c非常接近,几乎无法进入我的显著问题列表。 |
![]() |
Dima Malko · 如何在指定符号前添加符号? 2 年前 |
![]() |
shekharsabale · 从列表元素捕获子字符串 2 年前 |
![]() |
Manny · 如何比较Perl中的字符串? 2 年前 |
![]() |
Manan Girdhar · 拆分字符串并仅在java中使用第二部分 2 年前 |
![]() |
AnxiousLuna · Python使用len()获取数组索引数 2 年前 |
![]() |
antonoyaro8 · 数据帧中每列上的Grepl 2 年前 |