我目前正在一个项目中需要访问Haskell中的Array-Matrix中的元素。所以,我试着用Google搜索,到处搜索。Haskell阵列(矩阵)元素访问
的funcion应该是这样的:
getElementIndex :: Int -> Array (Int,Int) Int -> (Int,Int)
而在矩阵它必须返回元素的I
和J
指标。
我目前正在一个项目中需要访问Haskell中的Array-Matrix中的元素。所以,我试着用Google搜索,到处搜索。Haskell阵列(矩阵)元素访问
的funcion应该是这样的:
getElementIndex :: Int -> Array (Int,Int) Int -> (Int,Int)
而在矩阵它必须返回元素的I
和J
指标。
要在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
,然后采取匹配的第一个元素。
如何
\x -> map fst . filter ((==x) . snd) . assocs
所以,在一个二维数组给出的元素,你需要找到一个元素(大概,独特之处?),并返回你发现它的指数?这当然是可能的(但对于数组来说有点奇怪,因为它意味着线性扫描)。你到目前为止有多远? – 2011-05-09 18:53:53
是的,它是独一无二的..我想我必须遍历整个数组,并检查值是否是预期值,如果是,则返回它。但我不知道如何访问数组中的元素(单独)。 – 2011-05-09 19:23:45