我有一个这样的哈希:
%hash = ('test' => 1,
'test1' => 2,
'test2' => 3,);
我想对此哈希进行排序并从哈希中删除第一个键值对。如果我这样做,(排序键 %hash)[0],我可以访问第一个键。但是,如何删除该键值对?
如果我做
delete (sort keys %hash)[0]
Perl 抛出一个错误,
删除参数不是 HASH 或 ARRAY 元素
我有一个这样的哈希:
%hash = ('test' => 1,
'test1' => 2,
'test2' => 3,);
我想对此哈希进行排序并从哈希中删除第一个键值对。如果我这样做,(排序键 %hash)[0],我可以访问第一个键。但是,如何删除该键值对?
如果我做
delete (sort keys %hash)[0]
Perl 抛出一个错误,
删除参数不是 HASH 或 ARRAY 元素
该表达式(sort keys %hash)[0]
返回一个字符串,因此您不能将其传递给delete
. 你必须告诉delete
你要从哪个哈希中删除。它应该是这样的:
delete $hash{(sort keys %hash)[0]};
首先,哈希没有“顺序”,但如果你想删除按字母顺序排在第一位的条目,你可以这样做:
delete $hash{(sort keys %hash)[0]};
如果您希望多次执行此操作,那么您应该保留一个排序的哈希键数组。
像这样
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 }
{}