我目前正处于一个项目中,需要访问Haskell中Array-Matrix中的元素。所以,我试过谷歌搜索,到处搜索。
这个功能应该是这样的:
getElementIndex :: Int -> Array (Int,Int) Int -> (Int,Int)
必须返回矩阵中元素的I
和J
索引。
答案 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)