2010-02-21 43 views

回答

23

它的那样简单

my %c; 
@c{@a} = @b; 
+0

太棒了!我忘了切片解决方案,但我经常使用它。 – codeholic 2010-02-21 18:29:12

+0

谢谢!我想知道为什么它不在书中(我读过的书)。 – Temujin 2010-02-21 20:10:53

+0

http://perldoc.perl.org/perldata.html#Slices – toolic 2010-02-21 20:19:34

2

如果我理解正确的问题:

my %c; 
$c{$a[$_]} = $b[$_] for (0 .. @a-1); 
+0

我真的很喜欢Perl的,但有时一个可以绝望的编程语言允许你比你的源代码中的字母更多的非字母字符... – Boldewyn 2010-02-21 18:24:07

+2

@Boldewyn:通常使用真正的变量名修复 – ysth 2010-02-21 23:28:57

0

A是键,B的是哈希C的值:

use strict; 
use warnings; 

my @a = 1 .. 3; 
my @b = 4 .. 6; 
my %c; 
for (0 .. $#a) { 
    $c{$a[$_]} = $b[$_] 
} 

请记住,不能有任何重复的值A数组。

8
use List::MoreUtils 'mesh'; 
my %c = mesh @a, @b; 

这就是它的内部是怎样做(如果你确定大约相等数量的元素):

my %c = map { $a[$_] => $b[$_] } 0 .. $#a; 
+0

好的一个,我没有想到使用地图。 – 2010-02-21 17:58:27

+0

或者滚动你自己的:'sub mesh {@_ [map $ _&1? $ _ >> 1:($ _ >> 1)+($#_ >> 1),1 .. @ _]}' – ysth 2010-02-21 23:28:06

相关问题