Haskell 数组(矩阵)元素访问

发布于 2024-11-06 04:35:33 字数 240 浏览 3 评论 0原文

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

该函数应该是这样的:

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

并且它必须返回矩阵中元素的IJ索引。

I'm currently in a project that will need to access elements in an Array-Matrix in Haskell. So, I've tried googling it, searching everywhere.

The funcion is supposed to be like this:

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

And it must return the I and J indexes of the element in the matrix.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

じее 2024-11-13 04:35:33

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

To read elements from Array types in Haskell, you use the (!) operator, as in:

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

so, now all you need to do is walk the index space, rows and columns. I like list comprehensions for that kind of task:

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

which is just a specialized version of Data.Array.assocs:

assocs :: Ix i => Array i e -> [(i, e)]

which returns a lazy list of indices and elements. So, call assocs, and then take the first element that matches.

半边脸i 2024-11-13 04:35:33

怎么样

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

How about

\x -> map fst . filter ((==x) . snd) . assocs
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文