2009-07-10 37 views

Trả lời

61
scalar keys %hash 

hoặc chỉ

keys %hash 

nếu bạn đã có trong một bối cảnh vô hướng, ví dụ my $hash_count = keys %hash   hoặc   print 'bighash' if keys %hash > 1000.

Ngẫu nhiên, $#array không tìm thấy số lượng phần tử, nó tìm thấy chỉ mục cuối cùng. scalar @array tìm số lượng phần tử.

+0

$ # + 1 - chúng tôi sẽ không nhận được các yếu tố. tôi có nghĩa là với $ # – joe

+1

Ah, tôi hiểu rồi. Vâng, tôi vẫn sẽ đề nghị 'scalar @ array' trên' $ # array + 1'. :) – chaos

+0

có bất kỳ lý do cụ thể nào cho rằng – joe

2

chúng ta có thể sử dụng như thế này quá

my $keys = keys(%r) ; 
print "keys = $keys" ; 

0+(keys %r) 
+0

tôi tìm thấy điều này sau khi được đăng trong số – joe

1

Sau đây sẽ trả lại một ít mà số lượng các phím trong băm của bạn. Bạn có thể thích nó nếu bạn thích các $#array kiểu làm việc (hoặc conciseness):

$#{$hash}; 

QUAN TRỌNG EDIT:

Giữ trên ... Đây là thú vị. Nó hoạt động nếu bạn muốn sử dụng nó như là một tham chiếu mảng, nhưng không phải nếu bạn sử dụng nó bên ngoài. Vì vậy, nó rất hữu ích nếu bạn muốn truy cập chìa khóa cuối cùng của băm của bạn, miễn là bạn đã gán phím của bạn như là một mảng để một temp: Check this out:

%hash = ("barney" => "dinosaur", "elmo" => "monster"); 
@array = sort {$a cmp $b} keys %hash; 
print $array[$#{$hash}]; 
# prints "elmo" 
+1

Câu trả lời này làm tôi ngạc nhiên, vì vậy tôi đã thử nó và ...nó không hoạt động. – dave4420

+0

@Dave: Kiểm tra chỉnh sửa quan trọng ở trên. Cảm ơn cho những người đứng đầu lên. – Zaid

+5

@Zaid: thay thế '$ # {$ hash}' bằng '-1'. '$ array [-1]' luôn luôn có nghĩa là phần tử cuối cùng của '@ array' (và' $ array [-2] 'luôn có nghĩa là phần tử thứ hai, cuối cùng, vv). '$ hash' không liên quan đến'% hash'. Trong mã của bạn, perl thấy bạn sử dụng một biến không xác định như là một tham chiếu mảng, do đó giả vờ rằng nó * là * một tham chiếu mảng. Hãy thử 'sử dụng cảnh báo; sử dụng nghiêm ngặt; 'ngay từ đầu và xem những gì perl nói sau đó. – dave4420

0

Nhưng không phải sau khi Perl 5.10:

use feature ":5.10"; 
my %p =(); 
say $#%p; 

# $# is no longer supported 

và tồi tệ hơn:

use feature ":5.10"; 
my %p = (a=>1, b=>2, c=>3); 
say $#{%p}; 

# -1 
-4

này sẽ làm việc theo cách dễ dàng và đối với bất kỳ kích thước của một băm.

in các khóa vô hướng% băm;

+2

Xin lỗi nhưng ... điều này khác với câu trả lời được chấp nhận nhiều, được chấp thuận, được đăng cách đây 7 năm, ngoài việc sử dụng 'in'? –

0

in các khóa vô hướng% băm;

OR 

$ X = khóa% băm; in $ X;

(Keys% băm trả về giá trị của phím trong bối cảnh danh sách những thay đổi sâu hơn vào bối cảnh vô hướng (khi gán cho biến vô hướng) .)

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