Perl从散列中提取元素范围

Perl从散列中提取元素范围,perl,hash,Perl,Hash,如果我有一个散列: %hash = ("Dog",1,"Cat",2,"Mouse",3,"Fly",4); 如何提取此哈希的前X个元素。例如,如果我想要前3个元素,%newhash将包含(“Dog”,1,“Cat”,2,“Mouse”,3) 我使用的是大散列(~8000个键)。您可能希望使用以下内容: my %hash = ("Dog",1,"Cat",2,"Mouse",3,"Fly",4); for ( (sort keys %hash)[0..2] ) { say $hash{

如果我有一个散列:

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


我使用的是大散列(~8000个键)。

您可能希望使用以下内容:

my %hash = ("Dog",1,"Cat",2,"Mouse",3,"Fly",4);
for ( (sort keys %hash)[0..2] ) {
    say $hash{$_};
}

您可能需要使用以下内容:

my %hash = ("Dog",1,"Cat",2,"Mouse",3,"Fly",4);
for ( (sort keys %hash)[0..2] ) {
    say $hash{$_};
}

您应该有一个数组:

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";
my%hash=(“狗”=>1,“猫”=>2,“鼠标”=>3,“飞”=>4);
我的@数组;
foreach$值(排序{$hash{$a}$hash{$b}
密钥%hash)
{
push(@array,{$value=>$hash{$value}});
}
#获取范围:
my@part=@array[0..2];
打印部分结果;
打印$part[0]{'Cat'}.\n;

您应该有一个数组:

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";
my%hash=(“狗”=>1,“猫”=>2,“鼠标”=>3,“飞”=>4);
我的@数组;
foreach$值(排序{$hash{$a}$hash{$b}
密钥%hash)
{
push(@array,{$value=>$hash{$value}});
}
#获取范围:
my@part=@array[0..2];
打印部分结果;
打印$part[0]{'Cat'}.\n;
“此哈希的前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};
my%hash=('Dog'=>1,'Cat'=>2,'Mouse'=>3,'Fly'=>4);
my@hashkeys=排序{$hash{$a}$hash{$b}}键%hash;
拼接(@hashkeys,3);
我的%newhash;
@newhash{@hashkeys}=@hash{@hashkeys};
“此哈希的前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};
my%hash=('Dog'=>1,'Cat'=>2,'Mouse'=>3,'Fly'=>4);
my@hashkeys=排序{$hash{$a}$hash{$b}}键%hash;
拼接(@hashkeys,3);
我的%newhash;
@newhash{@hashkeys}=@hash{@hashkeys};


hash不保证元素顺序,使用数组或哈希数组,如果您需要有序列表,我可以先对哈希进行排序,不是吗?您的意思是将其排序为数组?谢谢can@Lebowski156您可以从散列中提取键或值的排序列表,您可以按数字、字典或其他方式进行。重要的是你想要的。散列不能保证元素的顺序,使用数组或散列数组,如果你需要有序列表,我可以先对散列排序,不是吗?你的意思是将它排序到数组?谢谢can@Lebowski156您可以从散列中提取键或值的排序列表,您可以按数字、字典或其他方式进行。重要的是你想要的。从样本数据来看,我怀疑它应该是
,而不是
cmp
@ysth idk,我刚刚从@ikegami
print 3 cmp 2
:1,
2 cmp 3
:-1,这有什么区别吗?@eicto,我告诉过你cmp的顺序是1,10,2,20,。。。这与1,2,10,20非常不同,…ikegami还修复了另一个您应该注意到的错误,如果您从样本数据中尝试代码,我怀疑它应该是
,而不是
cmp
@ysth idk,我只是从@ikegami
print 3 cmp 2
:1,
2 cmp 3
:-1,相同又有什么区别?@eicto,我告诉过你cmp的顺序是1,10,2,20,。。。这与1,2,10,20非常不同,…ikegami还修复了另一个bug,如果您尝试代码,您应该会注意到这个bug