Haskell数组(矩阵)元素访问

Bre*_*osa 3 arrays haskell element matrix

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

功能应该是这样的:

getElementIndex :: Int -> Array (Int,Int) Int -> (Int,Int)
Run Code Online (Sandbox Code Playgroud)

必须返回IJ元素的指标在基体中.

Don*_*art 6

要从ArrayHaskell中的类型中读取元素,请使用(!)运算符,如下所示:

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

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

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

这只是一个专门版本Data.Array.assocs:

assocs :: Ix i => Array i e -> [(i, e)]
Run Code Online (Sandbox Code Playgroud)

它返回一个惰性的索引和元素列表.所以,调用assocs,然后取第一个匹配的元素.