如何将数组“转换”成列表?

时间:2013-01-13 20:02:35

标签: arrays perl

我需要使用List::Gen中的函数cartesian。这个函数需要LIST作为第二个参数,但我有一个数组,比如

$VAR1 = [
          [
            1,
            2,
            3
          ],
          [
            'a',
            'b',
            'c'
          ],
          [
            'x'
          ]
        ];

如何将此类数组“转换”为列表,以便可以使用cartesian?在这种情况下,将数组放入列表上下文似乎不起作用。

2 个答案:

答案 0 :(得分:6)

Parens不会创建列表,只会更改优先级。

@a = ((1, 2, 3), (7, 8, 9));

相同
@a = (1, 2, 3, 7, 8, 9);

cartesian的示例显示了对数组的引用列表

cartesian { $_[0] . $_[1] } [1,2,3], [7,8,9];

所以看起来你想要创建一个包含两个元素的数组,每个元素都引用另一个数组。

@a = ( [1,2,3], [7,8,9] );

然后,为了回答您的问题,在列表上下文中评估@a将返回这两个引用。

cartesian { $_[0] . $_[1] } @a;

答案 1 :(得分:0)

在你的新问题中,你有

$VAR1 = [
      [
        1,
        2,
        3
      ],
      [
        'a',
        'b',
        'c'
      ],
      [
        'x'
      ]
    ];

尽管您声称它不起作用,但您只需要在列表上下文中评估数组。

cartesian { ... } @$VAR1;

例如,

( cartesian { join '|', @_ } @$VAR1 )->say;

给出

1|a|x 1|b|x 1|c|x 2|a|x 2|b|x 2|c|x 3|a|x 3|b|x 3|c|x