两个list变成一个hash

标题太恶心了,不知道该如何表达的清楚一点,英文叫Hash from two arrays。

我的意思是在Perl中,给了两个list,list含有相同个数的元素,如何将这两个list“合并”成一个hash,其中第一个list的元素为key,两一个list的元素为value。

还是挺恶心,看个例子吧:

1 my @k = qw (a b c);
2 my @v = (1, 2 ,3);
3 # ...
4 # try to get a hash %h below;
5 %h = (
6 a => 1,
7 b => 2,
8 c => 3,
9 );

笨方法:

1 #!/usr/bin/perl
2  
3  use strict;
4  use warnings;
5
6  my @k = qw (a b c);
7  my @v = (1, 2, 3);
8
9  my %h;
11  for (my $i = 0; i<= $#k; i++) {
12   my $key = $k[$i];
13 my $value = $v[$i];
14 $h{$key} = $value;
15 }

简介的:

1 #!/usr/bin/perl
2  
3  use strict;
4  use warnings;
5
6  my @k = qw(a b c);
7  my @v = (1, 2, 3);
8  my %h;
9  @h{@k} = @v;

再来一个简洁的:

1 #!/usr/bin/perl
2  
3  use strict;
4  use warnings;
5  use List::MoreUtils qw(zip);
6
7  my @k = qw (a b c);
8  my @v = (1, 2, 3);
9  my %hash = zip @keys, @vals;
posted @ 2010-02-14 21:56  coldplayerest  阅读(634)  评论(0编辑  收藏  举报