如何从Perl中的哈希表中获取前n个键值对

Iam*_*619 4 perl hash

我对perl很新,所以我搜索了一段时间,但仍然得到答案.我想从哈希表中获得前100对,但不知道如何做到这一点.要从哈希表中获取每对,我们可以执行以下操作:

foreach my $term (keys %hashtable)
{
    do something regarding $hashtable{$term} here
}
Run Code Online (Sandbox Code Playgroud)

但如何获得前100对呢?非常感谢!

yst*_*sth 8

其他方式:

my %hash100 = (%hashtable)[0..199];
while ( my ($key, $value) = each %hash100 ) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

要么:

for my $key ( (keys %hashtable)[0..99] ) {
    my $value = $hashtable{$key};
    ...
}
Run Code Online (Sandbox Code Playgroud)


cho*_*oba 7

请注意,由于散列没有特定的顺序,所以没有像散列中的前100对那样.

另一个应该保护您免受一个错误的解决方案:

for my $i (1 .. 100) {
    my ($key, $value) = each %hashtable;
    print "$key => $value\n";
}
Run Code Online (Sandbox Code Playgroud)

  • @ lam619您无法按值(或其他任何内容)对哈希进行排序.哈希是无序的,期间.你可以做的是整理键,然后迭代这个排序的数组. (2认同)
  • @ Iam619这个特定的代码没有任何问题:如果你已经有了这个玩家得分的哈希值,那么`for((sort {...} keys)[0..99])`部分非常简单.这里的'X'是关于这个哈希的来源:我不禁想知道为什么它以散列(无序结构)的形式返回这样的信息,而不是数组(有序结构). (2认同)