繁体   English   中英

Haskell:更改ByteString中给定索引处的元素

[英]Haskell: Changing an element at a given index in a ByteString

我正在尝试ByteString s组成的矩阵中的索引x和y处的字符更改为其他字符。 起初,我用[[Char]]代表矩阵,所以我能够使用.~Control.Lens.Setter更改值,但是这似乎并没有对工作[ByteString]

有没有什么方法可以像我现在正在使用的那样,在不unpack ByteString情况下使用镜头或修改元素?

现在的代码是:

render :: [[Char]] -> [Loc Int] -> [[Char]]
render maze []               = maze
render maze (Loc (x,y):locs) = render mutate locs
    where mutate = element y . element x .~ '*' $ maze

Loc所在的位置:

newtype Loc a = Loc (a,a) deriving (Show,Eq,Ord)

这适用于ByteStrings:

import qualified Data.ByteString.Char8 as BS
import Control.Lens

-- change character at position 2 to a space (ASCII code 32)

test = (BS.pack "abcdef") & ix 2 .~ 32

请注意,ByteStrings实际上是Word8值的容器,因此我们需要在这里使用ASCII代码。

ix运算符可用于许多其他数据结构,例如文本,列表,集合,地图等-有关更多详细信息,请参见此处

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM