作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要将字节串拆分为第一个由 100 个字符组成的字节串列表。对于列表,我可以使用 chunksOf
但不适用于 ByteString
.
有没有一些正确的方法来做到这一点?
最佳答案
两者 ByteString
和 Lazy.Bytestring
有 splitAt
functions您可以将其用于 unfoldr
一个列表。
import Data.List (unfoldr)
import Data.Int (Int64)
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as Lazy
justWhen :: (a -> Bool) -> (a -> b) -> (a -> Maybe b)
justWhen f g a = if f a then Just (g a) else Nothing
nothingWhen :: (a -> Bool) -> (a -> b) -> (a -> Maybe b)
nothingWhen f = justWhen (not . f)
chunksOf :: Int -> BS.ByteString -> [BS.ByteString]
chunksOf x = unfoldr (nothingWhen BS.null (BS.splitAt x))
chunksOf' :: Int64 -> Lazy.ByteString -> [Lazy.ByteString]
chunksOf' x = unfoldr (nothingWhen Lazy.null (Lazy.splitAt x))
OverloadedStrings
可以更轻松地构建示例的字节串
{-# LANGUAGE OverloadedStrings #-}
main = do
print $ chunksOf 3 ""
print $ chunksOf 3 "Hello World!"
print $ chunksOf' 3 ""
print $ chunksOf' 3 "Hello, World"
关于haskell - ByteString 的 chunksOf 模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32826539/
我需要将字节串拆分为第一个由 100 个字符组成的字节串列表。对于列表,我可以使用 chunksOf但不适用于 ByteString . 有没有一些正确的方法来做到这一点? 最佳答案 两者 ByteS
我是一名优秀的程序员,十分优秀!