2

私はこのようなハッシュを持っています:

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

このハッシュをソートし、ハッシュから最初のキーと値のペアを削除したいと考えています。これを行うと (sort keys %hash)[0]、最初のキーにアクセスできます。ただし、そのキーと値のペアを削除するにはどうすればよいですか?

私が行った場合

delete (sort keys %hash)[0]

Perl はエラーをスローします。

delete 引数が HASH または ARRAY 要素ではありません

4

3 に答える 3

12

(sort keys %hash)[0]は文字列を返すため、それをに渡すことはできませんdeletedelete削除するハッシュを指定する必要があります。次のようになります。

delete $hash{(sort keys %hash)[0]};
于 2012-07-26T04:17:51.413 に答える
4

まず、ハッシュには「順序」がありませんが、アルファベット順で最初に来るエントリを削除したい場合は、次のようにします。

delete $hash{(sort keys %hash)[0]};
于 2012-07-26T04:17:48.013 に答える
3

If you are expecting to do this operation more than once then you should keep an array of sorted hash keys.

Like this

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;
}

output

{ testA => 1, testB => 2, testC => 3 }
{ testB => 2, testC => 3 }
{ testC => 3 }
{}
于 2012-07-26T08:18:18.683 に答える