我有以下哈希,我希望按照我设置的顺序保留它;这甚至可能吗?如果没有,是否存在任何替代方案?
my %hash = ('Key1' => 'Value1', 'Key2' => 'Value2', 'Key3' => 'Value3');
我需要编写自定义排序子程序吗?我有哪些选择?
谢谢!
请参阅Tie::Hash::Indexed。引用其概要:
use Tie::Hash::Indexed;
tie my %hash, 'Tie::Hash::Indexed';
%hash = ( I => 1, n => 2, d => 3, e => 4 );
$hash{x} = 5;
print keys %hash, "\n"; # prints 'Index'
print values %hash, "\n"; # prints '12345'
尝试这样做:
print "$_=$hash{$_}\n" for sort keys %hash;
如果您希望它按字母顺序排序。
如果您需要保留原始订单,请参阅其他帖子。
一种可能性是像你有时对数组做的一样:指定键。
for (0..$#a) { # Sorted array keys
say $a[$_];
}
for (sort keys %h) { # Sorted hash keys
say $h{$_};
}
for (0, 1, 3) { # Sorted array keys
say $h{$_};
}
for (qw( Key1 Key2 Key3 )) { # Sorted hash keys
say $h{$_};
}
您还可以按如下方式获取有序值:
my @values = @h{qw( Key1 Key2 Key3 )};
这取决于您将如何访问数据。如果您只想存储它们并访问最后一个/第一个值,您总是可以将哈希放在一个数组中并使用 push() 和 pop()。
#!/usr/bin/env perl
use strict;
use warnings;
use v5.10;
use Data::Dumper;
my @hashes;
foreach( 1..5 ){
push @hashes, { "key $_" => "foo" };
}
say Dumper(\@hashes);