对于一个简单的问题抱歉,但我对Perl很陌生! 我有一个名为阵列@input它有如下数据(注意@input的大小并不总是相同):在Perl中重新排列数组
[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
谢谢!
对于一个简单的问题抱歉,但我对Perl很陌生! 我有一个名为阵列@input它有如下数据(注意@input的大小并不总是相同):在Perl中重新排列数组
[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
谢谢!
$tmparr = join(" ", @input);
@elements = split(" ", $tmparr);
这是行得通吗?
编辑:TLP提供在下面的评论一更好的解决方案,map split, @input
谢谢!这项工作 – 2012-02-02 17:33:10
为什么在不需要时使用转换变量?当插值做同样的事情时加入? '@elements = split'',“@input”' – TLP 2012-02-02 17:48:24
为什么在不需要时使用'split'参数? '@input = map {split} @ input'。 – 2012-02-02 18:12:55
好,无论是它的一维数组需要分裂,或者需要扁平化的二维。所以,这是每个任务的一个子集。
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;
当你说'[0] 20004 11189 20207',你的意思是元素[0]包含一个字符串使用这些值,或该元素[0]是本身含有三个值另一个数组?如果您可以发布调试器命令'x @ input'的输出将会非常有帮助。 – 2012-02-02 17:23:39