首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >perl排序循环

perl排序循环
EN

Stack Overflow用户
提问于 2012-07-11 01:27:31
回答 2查看 379关注 0票数 0

我有一个散列的散列,它是这样设置的:

代码语言:javascript
复制
$hash->{$val}->{$val2}

在第二个散列(对应于$val2的散列)中是一个值列表。我可以有三个这样的列表:

代码语言:javascript
复制
$hash->{$val}->{1} = [1,2,3]
$hash->{$val}->{2} = [4,5,6]
$hash->{$val}->{3} = [7,8,9]

我希望将这些列表的值放入一个新的数组中,按$val2按循环顺序排序。因此,结果将如下所示:

代码语言:javascript
复制
@new_arr = (1,4,7,2,5,8,3,6,9)

有没有人知道perl中有一种我可以做到这一点的方法?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-11 01:34:43

如果您有CPAN访问权限,则可以安装List::MoreUtils并使用它:

代码语言:javascript
复制
use List::MoreUtils qw(zip);

my @new_arr = zip(@$hash->{$val}{1}, @$hash->{$val}{2}, @$hash->{$val}{3});

如果$hash->{$val}中的键/值对的数量是动态的,不幸的是,由于原型化,zip需要实际的数组(而数组引用不会这样做)。幸运的是,你可以通过强制旧式调用并传入数组ref来绕过它:

代码语言:javascript
复制
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 :-(
票数 3
EN

Stack Overflow用户

发布于 2012-07-11 02:31:57

List::Gentuples函数也可以做到这一点:

代码语言:javascript
复制
my @tuple = tuples [1..3], [4..6], [7..9];

say "@$_" for @tuple;  # 1 4 7
                       # 2 5 8
                       # 3 6 9
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11418670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档