Haskell中实现从指定索引复制不可变数组到可变数组的方法
实现
copyAtPositionI函数的方案 没问题,这就帮你搞定这个Haskell函数的实现!
首先,我们需要导入必要的标准库模块,来处理Word16类型和IOArray的操作:
import Data.Word (Word16) import Data.Array.IO (IOArray, writeArray)
接下来是函数的实现,思路很直接:把列表里的每个元素和它要写入的目标索引一一配对,然后逐个写入到IO数组中:
copyAtPositionI :: IOArray Word16 Word16 -> [Word16] -> Word16 -> IO () copyAtPositionI arr values startIdx = mapM_ (\(idx, val) -> writeArray arr idx val) $ zip [startIdx..] values
代码解释
zip [startIdx..] values:这个表达式会生成一个索引和元素的配对列表。比如如果startIdx是5,values是[10,20,30],就会得到[(5,10), (6,20), (7,30)],完美对应每个元素要写入的位置。mapM_:这个函数会遍历配对列表,对每一对执行writeArray arr idx val操作。因为writeArray返回IO (),mapM_会把这些IO动作依次执行,最后返回一个总的IO (),刚好符合我们函数的返回类型要求。
因为题目已经明确说明不会出现索引越界的情况,所以我们不需要额外添加边界检查逻辑,这个实现就能满足需求啦。
内容的提问来源于stack exchange,提问作者gibarsin
相关产品推荐
相关产品推荐

