在 Erlang 中使用二维(多)维数组

发布于 2024-07-13 02:28:50 字数 342 浏览 2 评论 0原文

这些天我正在解决 Erlang 中的 Project Euler 问题。

由于我从一开始就是一名 C++ 程序员,有时我真的很想使用二维数组进行编码。

我的想法之一是使用像这样的元组和列表:

List=[{X,0}||X<-lists:seq(1,3)]
{1,0}
{2,0}
{3,0}

Is there better way to Implement multiDimensions arrays in Erlang?

These days I'm solving Project Euler problems in Erlang.

Since I'm a C++ programmer from the beginning, sometimes I really want to code using two dimensional arrays.

One of my idea is to use tuples and lists like this:

List=[{X,0}||X<-lists:seq(1,3)]
{1,0}
{2,0}
{3,0}

Is there nice way to implement multidimensional arrays in Erlang?

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

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

发布评论

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

评论(3

南巷近海 2024-07-20 02:28:50

请参阅数组模块,但对于多维访问,您必须编写自己的包装器。 如果您的任何维度很短并且访问主要是读取,您可以使用元组并使用 erlang:elementerlang:setelement。 无论如何,建议使用自己的包装。

See array module but for multidimensional access you have to write your own wrapper. If any of your dimension is short and access is mostly read you can use tuples and use erlang:element and erlang:setelement. Own wrapper is recommended anyway.

话少情深 2024-07-20 02:28:50

尝试使用 {X, Y, Z} 作为键的数组(实际上是字典)。 它看起来像 3d 数组;)

Try array(actually dict) with {X, Y, Z} as a key. It's look like 3d array ;)

多像笑话 2024-07-20 02:28:50

我为二维数组的数组模块编写了一个小包装器

-module(array_2d).
-export([new/2, get/3, set/4]).

new(Rows, Cols)->
    A = array:new(Rows),
    array:map(fun(_X, _T) -> array:new(Cols) end, A).

get(RowI, ColI, A) ->
    Row = array:get(RowI, A),
    array:get(ColI, Row).

set(RowI, ColI, Ele, A) ->
    Row = array:get(RowI, A),
    Row2 = array:set(ColI, Ele, Row),
    array:set(RowI, Row2, A).

I wrote a small wrapper over array module for 2d arrays

-module(array_2d).
-export([new/2, get/3, set/4]).

new(Rows, Cols)->
    A = array:new(Rows),
    array:map(fun(_X, _T) -> array:new(Cols) end, A).

get(RowI, ColI, A) ->
    Row = array:get(RowI, A),
    array:get(ColI, Row).

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