Arrays Haskell数组(矩阵)元素访问

Arrays Haskell数组(矩阵)元素访问,arrays,haskell,matrix,element,Arrays,Haskell,Matrix,Element,我目前在一个项目中,需要访问Haskell中数组矩阵中的元素。所以,我试着用谷歌搜索它,到处搜索 函数应该是这样的: getElementIndex :: Int -> Array (Int,Int) Int -> (Int,Int) 它必须返回矩阵中元素的I和J索引。如何 \x -> map fst . filter ((==x) . snd) . assocs 要从Haskell中的数组类型中读取元素,请使用(!)运算符,如下所示: Prelude Data.Array

我目前在一个项目中,需要访问Haskell中数组矩阵中的元素。所以,我试着用谷歌搜索它,到处搜索

函数应该是这样的:

getElementIndex :: Int -> Array (Int,Int) Int -> (Int,Int)
它必须返回矩阵中元素的
I
J
索引。

如何

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

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

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]
                  ]
它返回一个索引和元素的惰性列表。因此,调用
assocs
,然后获取第一个匹配的元素。

中的简单矩阵

因此,给定2D数组中的一个元素,您需要找到该元素(可能是唯一的?),并返回在中找到它的索引?这当然是可能的(但对于阵列来说有点奇怪,因为这意味着线性扫描)。到目前为止你走了多远?是的,它是独一无二的。。我想我必须遍历整个数组,检查值是否为预期值,如果是,则返回它。但是我不知道如何(单独)访问数组中的元素。
assocs :: Ix i => Array i e -> [(i, e)]