Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Will keys and values of a hash have the same "order" in Perl?

Tags:

hash

perl

I understand that a hash is not ordered in perl. What I am concerned about is if I can depend on the keys and values coming out with an index relationship.

Say I have this hash

my %h = ("a" => 1, "b" => 2, "c" => 3, "d" => 4);

If I do keys %h, I might get

("b", "a", "d", "c")

Would I be guaranteed that values %h would come out in the same order to match keys? Can I expect?

(2, 1, 4, 3)

Or is there no guarantee that there's any index relationship between keys %h and values %h?

like image 915
Mulan Avatar asked Dec 09 '22 08:12

Mulan


1 Answers

Yes. As long as the hash is not changed (insertion or deletion), keys, values and each will keep the same order:

So long as a given hash is unmodified you may rely on keys, values and each to repeatedly return the same order as each other.

– from perldoc -f keys

So you could safely copy a hash like:

my %orig = ...;
my %copy;
@copy{keys %orig} = values %orig;
like image 140
amon Avatar answered Dec 10 '22 22:12

amon