2010-08-24 42 views
17

Tôi đang cố gắng tìm ra một cách để khởi tạo một băm mà không cần phải đi qua một vòng lặp. Tôi đã hy vọng sử dụng lát cho điều đó, nhưng nó dường như không tạo ra kết quả mong đợi.Làm cách nào để khởi tạo các giá trị trong băm không có vòng lặp?

Xét đoạn mã sau:

#!/usr/bin/perl 
use Data::Dumper; 

my %hash =(); 
$hash{currency_symbol} = 'BRL'; 
$hash{currency_name} = 'Real'; 
print Dumper(%hash); 

này không làm việc như mong đợi và cho kết quả sau:

$VAR1 = 'currency_symbol'; 
$VAR2 = 'BRL'; 
$VAR3 = 'currency_name'; 
$VAR4 = 'Real'; 

Khi tôi cố gắng sử dụng lát như sau, nó không hoạt động:

#!/usr/bin/perl 
use Data::Dumper; 

my %hash =(); 
my @fields = ('currency_symbol', 'currency_name'); 
my @array = ('BRL','Real'); 
@hash{@array} = @fields x @array; 

Đầu ra là:

$VAR1 = 'currency_symbol'; 
$VAR2 = '22'; 
$VAR3 = 'currency_name'; 
$VAR4 = undef; 

Rõ ràng là đã xảy ra sự cố.

Vì vậy, câu hỏi của tôi sẽ là: cách thanh lịch nhất để khởi tạo băm cho hai mảng (khóa và giá trị) là gì?

Trả lời

23
use strict; 
use warnings; # Must-haves 

# ... Initialize your arrays 

my @fields = ('currency_symbol', 'currency_name'); 
my @array = ('BRL','Real'); 

# ... Assign to your hash 

my %hash; 
@hash{@fields} = @array; 
+0

Cảm ơn - hoàn hảo! – emx

6
%hash = ('current_symbol' => 'BLR', 'currency_name' => 'Real'); 

hoặc

my %hash =(); 
my @fields = ('currency_symbol', 'currency_name'); 
my @array = ('BRL','Real'); 
@hash{@fields} = @array x @fields; 
+0

Cảm ơn bạn ví dụ sách giáo khoa này về cách khởi tạo một hash. Tuy nhiên, đây không phải là những gì tôi đang tìm kiếm. Tôi muốn xem nếu nó có thể được thực hiện với các mối nối. – emx

+1

nhưng đối với kết quả google đầu tiên, đây là một xác nhận lại/rất hữu ích về cú pháp rất hữu ích – lol

3

Đối với người đầu tiên, hãy thử

my %hash = 
("currency_symbol" => "BRL", 
    "currency_name" => "Real" 
); 
print Dumper(\%hash); 

Kết quả sẽ là:

$VAR1 = { 
      'currency_symbol' => 'BRL', 
      'currency_name' => 'Real' 
     }; 
+0

Cảm ơn bạn về ví dụ về sách giáo khoa này về cách khởi tạo một băm. Tuy nhiên, đây không phải là những gì tôi đang tìm kiếm. Tôi muốn xem nếu nó có thể được thực hiện với các mối nối. – emx

+0

Trên thực tế @emx, tôi quan tâm nhiều hơn đến việc cho bạn thấy lý do dữ liệu của bạn: Đầu ra Dumper không giống như một băm. –

+0

Tôi nghĩ rằng bạn có ý định bỏ phiếu cho tôi thay vì chấp nhận tôi, nhưng tôi không nghĩ rằng tôi xứng đáng. –

13

Vì vậy, những gì bạn muốn là pop ulate băm bằng cách sử dụng một mảng cho các phím, và một mảng cho các giá trị. Sau đó làm như sau:

#!/usr/bin/perl 
use strict; 
use warnings; 

use Data::Dumper; 

my %hash; 

my @keys = ("a","b"); 
my @values = ("1","2"); 

@hash{@keys} = @values; 

print Dumper(\%hash);' 

cho:

$VAR1 = { 
      'a' => '1', 
      'b' => '2' 
     }; 
+0

Cảm ơn - đây chính xác là những gì tôi đang tìm kiếm. Nó gần như quá đơn giản. – emx

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