2010-02-21 48 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

相關問題