gpt4 book ai didi

haskell - ByteString 的 chunksOf 模拟?

转载 作者:行者123 更新时间:2023-12-03 23:24:03 25 4
gpt4 key购买 nike

我需要将字节串拆分为第一个由 100 个字符组成的字节串列表。对于列表,我可以使用 chunksOf但不适用于 ByteString .

有没有一些正确的方法来做到这一点?

最佳答案

两者 ByteStringLazy.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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com