1

如果我有一个哈希:

%hash = ("Dog",1,"Cat",2,"Mouse",3,"Fly",4);

如何提取此哈希的前 X 个元素。例如,如果我想要前 3 个元素,%newhash 将包含 ("Dog",1,"Cat",2,"Mouse",3)。

我正在使用大散列(~ 8000 个键)。

4

3 回答 3

5

“这个哈希的前 X 个元素”没有任何意义。前三个元素按数值顺序排列?

my %hash = ( 'Dog' => 1, 'Cat' => 2, 'Mouse' => 3, 'Fly' => 4 );
my @hashkeys = sort { $hash{$a} <=> $hash{$b} } keys %hash;
splice(@hashkeys, 3);

my %newhash;
@newhash{@hashkeys} = @hash{@hashkeys};
于 2012-11-21T03:14:28.260 回答
0

你可能想使用这样的东西:

my %hash = ("Dog",1,"Cat",2,"Mouse",3,"Fly",4);
for ( (sort keys %hash)[0..2] ) {
    say $hash{$_};
}
于 2012-11-21T02:52:37.810 回答
0

你应该有一个数组 1:

my %hash = ("Dog" => 1,"Cat"=>2,"Mouse"=>3,"Fly"=>4);
my @array;
foreach $value (sort {$hash{$a} <=> $hash{$b} }
           keys %hash)
{
  push(@array,{$value=>$hash{$value}});
}

#get range:
my @part=@array[0..2];
print part of result;
print $part[0]{'Cat'}."\n";
于 2012-11-21T02:58:00.787 回答