Haskell数组(矩阵)元素访问

时间:2011-05-09 18:50:02

标签: arrays haskell matrix element

我目前正处于一个项目中,需要访问Haskell中Array-Matrix中的元素。所以,我试过谷歌搜索,到处搜索。

这个功能应该是这样的:

getElementIndex :: Int -> Array (Int,Int) Int -> (Int,Int)

必须返回矩阵中元素的IJ索引。

3 个答案:

答案 0 :(得分:6)

要从Haskell中的Array类型中读取元素,请使用(!)运算符,如:

Prelude Data.Array> let v = listArray (0,9) [1..10]
Prelude Data.Array> v ! 3
4

所以,现在你需要做的就是遍历索引空间,行和列。我喜欢这种任务的列表理解:

assocs' x y arr = [ ((i,j), arr ! (i,j))
                  | i <- [0..x-1]
                  , j <- [0..y-1]
                  ]

这只是Data.Array.assocs的专用版本:

assocs :: Ix i => Array i e -> [(i, e)]

返回索引和元素的惰性列表。因此,请调用assocs,然后获取匹配的第一个元素。

答案 1 :(得分:4)

怎么样

\x -> map fst . filter ((==x) . snd) . assocs

答案 2 :(得分:0)