2010-08-03 29 views
6

Cho một băm trong Perl (băm bất kỳ), làm thế nào tôi có thể trích xuất các giá trị từ băm đó, theo thứ tự chúng được thêm vào và đặt chúng trong một mảng?Làm cách nào tôi có thể trích xuất giá trị băm vào một mảng trong thứ tự chèn của chúng?

Ví dụ:

my %given = (foo => '10', bar => '20', baz => '15'); 

Tôi muốn để có được những kết quả sau:

my @givenValues = (10, 20, 15); 
+0

Ban đầu, tôi đã đưa ra câu trả lời đúng để @ mb14, nhưng điều duy nhất dân chủ để làm là để mang nó trở lại và đưa nó cho Zaid, do số lượng cao của phiếu. – Tom

Trả lời

2

Bạn có thể sử dụng values, nhưng tôi nghĩ bạn không thể nhận được chúng theo thứ tự đúng như thứ tự đã bị mất khi bạn tạo mã băm

+1

Tài liệu tại http://perldoc.perl.org/functions/values.html đồng ý với bạn: Các giá trị được trả về theo thứ tự ngẫu nhiên rõ ràng. Thứ tự ngẫu nhiên thực tế có thể thay đổi trong các phiên bản tương lai của Perl. – Tom

+0

Miễn là Hash không phải OrderedHash (như OrderedHash trong ruby), lệnh bị mất ... Việc bạn có thể làm là lưu trữ danh sách (foo, 10, bar, 20, 15) và chuyển đổi nó thành băm khi cần – mb14

+0

Tiêu đề của câu hỏi đã thay đổi và do đó câu hỏi, vì vậy câu trả lời của tôi bây giờ là vô nghĩa – mb14

5

Sau đây sẽ làm những gì bạn muốn:

my @orderedKeys = qw(foo bar baz); 
my %records  = (foo => '10', bar => '20', baz => '15'); 

my @givenValues = map {$records{$_}} @orderedKeys; 

NB: Một giải pháp tốt hơn nữa là sử dụng Tie::IxHash hoặc Tie::Hash::Indexed để đặt hàng chèn trình quản lý.

3

Nếu bạn có một danh sách các phím theo thứ tự đúng, bạn có thể sử dụng một lát băm:

my @keys = qw(foo bar baz); 
my %given = {foo => '10', bar => '20', baz => '15'} 
my @values = @given{@keys}; 

Nếu không, sử dụng Tie::IxHash.

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