在Perl中重新排列数组

时间:2012-02-02 17:21:48

标签: arrays perl

为一个简单的问题道歉,但我对Perl很新! 我有一个名为@input的数组,它有以下数据(注意@input的大小并不总是相同):

[0]  20004 11189 20207
[1]  12345 1234 123 12 1

我想创建一个名为@elements的新数组,它将数据重新排列为:

[0] 20004
[1] 11189
[2] 20207
[3] 12345
[4] 1234
[5] 123
[6] 12
[7] 1

谢谢!

3 个答案:

答案 0 :(得分:2)

嗯,要么它是需要分裂的一维数组,要么是需要展平的二维数组。所以,这是每个任务的子目录。

use v5.10;
use strict;
use warnings;

my @input1 = ("20004 11189 20207", "12345 1234 123 12 1");
my @input2 = ([qw"20004 11189 20207"], [qw"12345 1234 123 12 1"]);

sub one_dim { # Simple extract digits with regex
    return map /\d+/g, @_;
    # return map split, @_;  # same thing, but with split
}
sub two_dim { # Simple expand array ref
    return map @$_, @_;
}

my @new = one_dim(@input1);
say for @new;
@new = two_dim(@input2);
say for @new;

答案 1 :(得分:1)

比Jon的答案更有效率:

@output = map { split / / } @input;

答案 2 :(得分:0)

$tmparr = join(" ", @input);
@elements = split(" ", $tmparr);

这有用吗?

修改: TLP 在下面的评论中提供了更好的解决方案,map split, @input