2011-05-09 178 views
3

我目前正在一个项目中需要访问Haskell中的Array-Matrix中的元素。所以,我试着用Google搜索,到处搜索。Haskell阵列(矩阵)元素访问

的funcion应该是这样的:

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

而在矩阵它必须返回元素的IJ指标。

+2

所以,在一个二维数组给出的元素,你需要找到一个元素(大概,独特之处?),并返回你发现它的指数?这当然是可能的(但对于数组来说有点奇怪,因为它意味着线性扫描)。你到目前为止有多远? – 2011-05-09 18:53:53

+0

是的,它是独一无二的..我想我必须遍历整个数组,并检查值是否是预期值,如果是,则返回它。但我不知道如何访问数组中的元素(单独)。 – 2011-05-09 19:23:45

回答

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,然后采取匹配的第一个元素。

4

如何

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