我有一个像这样设置的散列哈希:
$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中我能做到这一点的方法?谢谢!
答案 0 :(得分:3)
如果您有CPAN访问权限,则可以安装List::MoreUtils
并使用它:
use List::MoreUtils qw(zip);
my @new_arr = zip(@$hash->{$val}{1}, @$hash->{$val}{2}, @$hash->{$val}{3});
如果$hash->{$val}
中的键/值对的数量是动态的,遗憾的是zip
由于原型设计需要实际的数组(并且数组引用不会这样做)。幸运的是,你可以通过强制旧式调用并传入数组引用来解决它:
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 :-(
答案 1 :(得分:2)
List::Gen
的tuples
函数也可以执行此操作:
my @tuple = tuples [1..3], [4..6], [7..9];
say "@$_" for @tuple; # 1 4 7
# 2 5 8
# 3 6 9