【问题标题】:How to print out the elements of a 2D array in erlang如何在erlang中打印出二维数组的元素
【发布时间】:2015-12-30 06:36:01
【问题描述】:

我一直试图在 erlang 中打印出二维数组的元素,但是,因为没有循环,因此没有简单的方法来增加一个变量,更不用说两个了。我见过一两个用于制作单个循环的递归函数,但是,我无法将此代码转换为嵌套循环。这是我一直在使用的代码。

-module(test2). 
-export([do_loop/0,loop/1]).

do_loop() ->
    loop(0).

loop(10) ->
    ok;
loop(Count) ->
    io:format("~w~n", [Count]),
    loop(Count+1).

感谢任何帮助!

编辑: 这是数组的代码

create( X, Y ) -> array:new( [{size, X}, {default, array:new( [{size, Y}] )}] ).

get( X, Y, Array ) -> array:get( Y, array:get(X, Array) ).

【问题讨论】:

    标签: arrays recursion printing count erlang


    【解决方案1】:

    数组模块提供foldlfoldr分别将数组从低到高和从高到低折叠。

    使用foldl 并递归到二级数组(及以上):

    -module(test).
    -export([dump/1]).
    
    dump(Array) ->
        array:foldl(fun inner_dump/3, [], Array).
    

    转储函数接受数组并开始折叠。 array:foldl 采用折叠函数、初始累加器和要折叠的数组。它依次获取数组的每个元素并调用FoldFun(Index, Element, Accumulator),该调用的返回值成为新的累加器。对于这个函数,我将累加器定义为父数组的索引列表。

    inner_dump( Index, ArrayOrElement, Previous) ->
        case array:is_array(ArrayOrElement) of
            false ->
                io:format("~p ~p~n", [lists:reverse([Index|Previous]), ArrayOrElement]),
                Previous;
            true ->
                array:foldl(fun inner_dump/3, [Index|Previous], ArrayOrElement),
                Previous
        end.
    

    这是折叠功能。如果传递的元素不是数组,则将其索引添加到父索引列表中,然后反转该列表并将其与元素一起打印。 (这给出了每个数组的索引,如预期的那样从最外层开始)

    如果传递的元素是子数组,则将其索引添加到父索引列表中,并以相同的方式折叠它。

    这将允许您打印出任意深度的数组,并且即使每个子数组的大小不同,它仍然可以工作。

    这里是一个使用数组[[a,b,c],[1,2,3],["yes","no","maybe"]]的例子:

    2> Array.
    {array,3,0,undefined,
           {{array,3,10,undefined,
                   {a,b,c,undefined,undefined,undefined,undefined,undefined,
                      undefined,undefined}},
            {array,3,10,undefined,
                   {1,2,3,undefined,undefined,undefined,undefined,undefined,
                    undefined,undefined}},
            {array,3,10,undefined,
                   {"yes","no","maybe",undefined,undefined,undefined,undefined,
                    undefined,undefined,undefined}},
            undefined,undefined,undefined,undefined,undefined,undefined,
            undefined}}
    3> test:dump(Array).
    [0,0] a
    [0,1] b
    [0,2] c
    [1,0] 1
    [1,1] 2
    [1,2] 3
    [2,0] "yes"
    [2,1] "no"
    [2,2] "maybe"
    []
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 2015-02-03
      相关资源
      最近更新 更多