Tôi đã khá ngạc nhiên khi thấy rằng keys
chức năng vui vẻ làm việc với mảng:
keys HASH keys ARRAY keys EXPR
Trả về một danh sách bao gồm tất cả các phím của băm tên, hoặc chỉ số của một mảng. (Trong bối cảnh vô hướng, trả về số phím hoặc chỉ số.)
Có bất kỳ lợi ích trong việc sử dụng keys @array
thay vì 0 .. $#array
liên quan đến sử dụng bộ nhớ, tốc độ, vv, hoặc là những lý do cho chức năng này hơn của một nguồn gốc lịch sử?
Thấy keys @array
nắm giữ lên đến $[
sửa đổi, tôi đoán đó là lịch sử:
$ perl -Mstrict -wE 'local $[=4; my @array="a".."z"; say join ",", keys @array;'
Use of assignment to $[ is deprecated at -e line 1.
4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29
Đối với tôi, '0 .. $ # array' là một cấu trúc thuận tiện khi làm việc với' map', 'grep' và' sort': 'my @wantedIndices = grep {$ array [$ _] = ~/foo /} 0 .. $ # array; ' – Zaid
Bạn có thể làm rõ ý nghĩa của một mảng thưa thớt không? – Zaid
Một mảng thưa thớt về cơ bản là một băm với các phím số giữ lại thứ tự của các mục. Nếu bạn tạo một mảng với @a [1], @ [7] và @ [100_000_000] thì bạn sẽ nhận được một mảng lớn với tấn undef trong đó. 99% thời gian bạn có thể sử dụng một băm và được hạnh phúc với nó, nhưng đối với mảng thưa thớt lớn làm việc sắp xếp quan trọng hơn và hơn hút. – Mark