我有一个散列的散列,它是这样设置的:
$hash->{$val}->{$val2}在第二个散列(对应于$val2的散列)中是一个值列表。我可以有三个这样的列表:
$hash->{$val}->{1} = [1,2,3]
$hash->{$val}->{2} = [4,5,6]
$hash->{$val}->{3} = [7,8,9]我希望将这些列表的值放入一个新的数组中,按$val2按循环顺序排序。因此,结果将如下所示:
@new_arr = (1,4,7,2,5,8,3,6,9)有没有人知道perl中有一种我可以做到这一点的方法?谢谢!
发布于 2012-07-11 01:34:43
如果您有CPAN访问权限,则可以安装List::MoreUtils并使用它:
use List::MoreUtils qw(zip);
my @new_arr = zip(@$hash->{$val}{1}, @$hash->{$val}{2}, @$hash->{$val}{3});如果$hash->{$val}中的键/值对的数量是动态的,不幸的是,由于原型化,zip需要实际的数组(而数组引用不会这样做)。幸运的是,你可以通过强制旧式调用并传入数组ref来绕过它:
use List::MoreUtils qw(zip);
my @ordered_array_refs;
push @ordered_array_refs, $hash->{$val}{$_} for sort keys %{$hash->{$val}};
my @new_arr = &zip(@ordered_array_refs); # nasty :-(发布于 2012-07-11 02:31:57
List::Gen的tuples函数也可以做到这一点:
my @tuple = tuples [1..3], [4..6], [7..9];
say "@$_" for @tuple; # 1 4 7
# 2 5 8
# 3 6 9https://stackoverflow.com/questions/11418670
复制相似问题