从哈希中删除第一个键值对

时间:2012-07-26 04:13:58

标签: perl

我有这样的哈希:

%hash = ('test' => 1,
     'test1' => 2,
     'test2' => 3,);

我想对此哈希进行排序并从哈希中删除第一个键值对。如果我这样做, (排序键%hash)[0],我可以访问第一个键。但是,如何删除该键值对?

如果我这样做

delete (sort keys %hash)[0]

Perl抛出错误,

  

delete参数不是HASH或ARRAY元素

3 个答案:

答案 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 }
{}