这些天我正在用 Erlang 解决Project Euler问题。
由于我从一开始就是一名 C++ 程序员,所以有时我真的很想使用二维数组进行编码。
我的想法之一是使用这样的元组和列表:
List=[{X,0}||X<-lists:seq(1,3)]
{1,0}
{2,0}
{3,0}
有没有在 Erlang 中实现多维数组的好方法?
这些天我正在用 Erlang 解决Project Euler问题。
由于我从一开始就是一名 C++ 程序员,所以有时我真的很想使用二维数组进行编码。
我的想法之一是使用这样的元组和列表:
List=[{X,0}||X<-lists:seq(1,3)]
{1,0}
{2,0}
{3,0}
有没有在 Erlang 中实现多维数组的好方法?
请参阅数组模块,但对于多维访问,您必须编写自己的包装器。如果您的任何维度都很短并且访问权限主要是读取,您可以使用元组并使用erlang:element
and erlang:setelement
。无论如何,建议使用自己的包装器。
尝试使用 {X, Y, Z} 作为键的数组(实际上是 dict)。它看起来像 3d 数组;)
我为二维数组的数组模块写了一个小包装器
-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).