我需要广泛使用:
slice :: Int -> Int -> ByteString -> ByteString
slice start len = take len . drop start
两部分问题:
(Int, Int) -> ByteString -> ByteString
及其flip
个版本。我还尝试查找[a]
版本以查看是否有常用的名称。我怀疑我做错了什么,因为我强烈期望找到很多人走上同一条路,但是我的google-fu找不到任何东西。
答案 0 :(得分:8)
惯用法是通过take
和drop
,它在严格的字节串上具有 O(1)复杂性。
slice
,以阻止对不安全的索引操作的依赖。
答案 1 :(得分:1)
根据文件,没有这样的功能。目前严格的ByteStrings是represented作为指向pinned memory的缩写,偏移量和长度的指针。所以,实际上,您的实现是更好的拼接方式。但是,您应该小心拼接,因为拼接的字节串占用与原始字节串相同的空间量。为了避免这种情况,你可能希望copy一个拼接的字节串,但这并不总是必需的。