我有两个大小相等的数组,我想按元素组合它们。做这个的最好方式是什么? array
包似乎没有提供 zipWith
等效函数。
我不太愿意做自己的函数,因为我能想到的主要方法是用列表来回转换。我关心速度,我认为这种方式不是最有效的方式。
最佳答案
选项 1:使用 repa .如果您关心它,也可能会从并行性中获得一些性能优势。
选项 2:仅使用 bounds
获取索引。我建议一般避免列表理解;尽管在这种情况下其他答案正确使用了它们,但养成做正确事情的习惯可能是值得的。
zipWithArr f xs ys = listArray (bounds xs) $ fmap (liftA2 f (xs !) (ys !)) (range (bounds xs))
之所以可行,是因为 Haskell 的列表是惰性的,我们通常可以将它们视为控制结构(由于各种优化),尽管我们不可以将它们视为容器。此外,GHC 最多为每个 lambda 计算一次表达式,因此通常您不必担心这样做效率低下。
关于haskell - 数组有 zipWith 函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46141280/