2010-02-21 40 views

Trả lời

23

nó đơn giản như

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

Tuyệt vời! Tôi quên về giải pháp lát, mặc dù tôi sử dụng nó thường xuyên. – codeholic

+0

Cảm ơn! Tôi tự hỏi tại sao nó không có trong sách (tôi đọc). – Temujin

+0

http://perldoc.perl.org/perldata.html#Slices – toolic

2

Nếu tôi hiểu vấn đề một cách chính xác:

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

Tôi thực sự thích Perl, nhưng đôi khi một có thể tuyệt vọng trên ngôn ngữ lập trình cho phép bạn có nhiều ký tự không phải chữ cái hơn các chữ cái trong mã nguồn của bạn ... – Boldewyn

+2

@Boldewyn: thường được cố định bằng cách sử dụng tên biến thực – ysth

0

A là chìa khóa, B là những giá trị của băm C:

use strict; 
use warnings; 

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

Hãy ghi nhớ rằng không phải bất kỳ giá trị trùng lặp trong mảng A.

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

Đó là cách nó được thực hiện trong nội bộ (nếu bạn chắc chắn về số lượng tương đương của các yếu tố):

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

Đẹp nhất, tôi đã không nghĩ về việc sử dụng bản đồ. –

+0

hoặc cuộn của riêng bạn: 'lưới phụ {@_ [map $ _ & 1? $ _ >> 1: ($ _ >> 1) + ($ # _ >> 1), 1 .. @ _]} ' – ysth

Các vấn đề liên quan