我有以下哈希(散列),我希望将其保持在我设置的顺序中;这是否可能?如果不行,是否存在任何替代方案?
my %hash = ('Key1' => 'Value1', 'Key2' => 'Value2', 'Key3' => 'Value3');
我需要编写自定义排序子程序吗?有哪些选项?
谢谢!
http://metacpan.org/pod/Tie::IxHash
use Tie::IxHash;
my %hash;
tie %hash,'Tie::IxHash';
这个哈希表将保持其顺序。
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);
$a[1]="a"; $a[0]="b"; print "@a\n";
将输出b a
。无论是数组还是哈希表都会按照物理位置返回元素。 - ikegami