Использование двух (многомерного) массива в Erlang - PullRequest
6 голосов
/ 11 февраля 2009

В эти дни я решаю Project Euler проблемы в Erlang.

Поскольку я с самого начала программист на C ++, иногда мне действительно хочется кодировать с использованием двумерных массивов.

Одна из моих идей - использовать такие кортежи и списки:

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

Есть ли хороший способ реализации многомерных массивов в Erlang?

Ответы [ 3 ]

3 голосов
/ 06 марта 2009

Попробуйте массив (фактически dict) с ключом {X, Y, Z}. Это похоже на 3d массив;)

2 голосов
/ 11 февраля 2009

См. модуль массива , но для многомерного доступа вы должны написать свою собственную оболочку. Если какое-либо из ваших измерений короткое и доступ в основном читается, вы можете использовать кортежи и использовать erlang:element и erlang:setelement. В любом случае рекомендуется использовать собственную обертку.

1 голос
/ 02 февраля 2017

Я написал небольшую оболочку над модулем массива для 2d массивов

-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).
...