我有这样的哈希:
%hash = ('test' => 1,
'test1' => 2,
'test2' => 3,);
我想对此哈希进行排序并从哈希中删除第一个键值对。如果我这样做, (排序键%hash)[0],我可以访问第一个键。但是,如何删除该键值对?
如果我这样做
delete (sort keys %hash)[0]
Perl抛出错误,
delete参数不是HASH或ARRAY元素
答案 0 :(得分:12)
表达式(sort keys %hash)[0]
返回一个字符串,因此您不能将其传递给delete
。您必须告诉delete
您要删除的哈希值。它应该是这样的:
delete $hash{(sort keys %hash)[0]};
答案 1 :(得分:4)
首先,哈希没有“顺序”,但如果你想删除第一个按字母顺序排列的条目,你可以这样做:
delete $hash{(sort keys %hash)[0]};
答案 2 :(得分:3)
如果您希望不止一次执行此操作,那么您应该保留一组已排序的哈希键。
喜欢这个
use strict;
use warnings;
use Data::Dump;
my %hash = (
testA => 1,
testB => 2,
testC => 3
);
my @keys = sort keys %hash;
dd \%hash;
while (@keys) {
delete $hash{shift @keys};
dd \%hash;
}
<强>输出强>
{ testA => 1, testB => 2, testC => 3 }
{ testB => 2, testC => 3 }
{ testC => 3 }
{}