当前位置: 首页 > 知识库问答 >
问题:

按散列Perl的值散列排序

孔飞舟
2023-03-14

假设我有一个哈希数据结构,构造如下:

%HoH => (
     flintstones => {
               family_members    => "fred;wilma;pebbles;dino",
               number_of_members => 4,
     },
     jetsons => {
               family_members    => "george;jane;elroy",
               number_of_members => 3,
     },
     simpsons => {
               family_members    => "homer;marge;bart;lisa;maggie",
               number_of_members => 5,
     },

)

在这种情况下,如何按值number_of_members从最大到最小对键进行排序?然后我想打印出最高的两个。这是一个大致的想法,但我知道这是错误的:

foreach $value (
    sort {
    $HoH{$a}{$number_of_members} cmp $HoH{$b}{$number_of_members}
    } keys %HoH)
my $count = 0;
while ($key, $value) = each %HoH) {
    if (count <= 2){
        print "${HoH}{$key}\t$key{$value}";
    }
}
continue {
    $count++;
};

我想要打印代码(空格以制表符分隔):

simpsons    homer;marge;bart;lisa;maggie
flintstones    fred;wilma;pebbles;dino

共有1个答案

丁安宜
2023-03-14

你在正确的轨道上。在散列中使用$a$b,并以数字方式比较值(

打印时,我发现将键存储在一个数组中并使用数组切片来访问它们是最简单的。

use strict;
use warnings;

my %HoH = (
     flintstones => {
               family_members    => "fred;wilma;pebbles;dino",
               number_of_members => 4,
     },
     jetsons => {
               family_members    => "george;jane;elroy",
               number_of_members => 3,
     },
     simpsons => {
               family_members    => "homer;marge;bart;lisa;maggie",
               number_of_members => 5,
     },    
);
my @sorted = sort { $HoH{$b}{'number_of_members'} <=> 
                    $HoH{$a}{'number_of_members'} } keys %HoH;

for (@sorted[0,1]) {   # print only first two
    print join("\t", $_, $HoH{$_}{'family_members'}), "\n";
}

输出:

simpsons        homer;marge;bart;lisa;maggie
flintstones     fred;wilma;pebbles;dino

 类似资料:
  • 根据关键码值(Key value)直接进行访问的数据结构;它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度;这个映射函数叫做散列函数,存放记录的数组叫做散列表。

  • 我有一个问题,我希望你能帮忙,因为我是哈希和哈希引用的东西的新手? 我有以下数据结构: 如果我想访问关键中的所有URL,以便我可以对URL执行一些其他操作,那么访问这些元素的正确或首选方法是什么? 例如,我将以下面的URL结束,然后我可以在< code>foreach循环中对这些URL执行操作: -编辑- 用于访问上面所示数据结构中进一步向下的元素的代码: 使用上面的代码,为什么会出现以下错误?

  • 考虑 HashSet 作为一个 HashMap,在此处我们只关心键(HashSet<T> 实际上只是一个包围 HashMap<T, ()> 的装包(wrapper))。(原文:Consider a HashSet as a HashMap where we just care about the keys (HashSet<T> is, in actuality, just a wrapper a

  • 问题内容: 我正在开发一个小型的Web应用程序,该应用程序在内部对用户进行身份验证。一旦用户通过身份验证,我的Web应用程序便会将一些信息(例如userID和Person的名称)传递给第三方Web应用程序。第三方开发人员建议我们对值进行哈希处理和加盐处理。 原谅我的无知,但这到底意味着什么? 我正在用Java编写应用程序。因此,我打算做的是使用Apache Commons Digest Utils

  • 问题内容: 我有兴趣采用任意命令并将其复制到新命令中,然后进行更改。 我想做的一种变更是交换键和值。不幸的是,某些价值观本身就是命令。但是,这会生成“无法散列的类型:’dict’”错误。我真的不介意将值字符串化并提供它的密钥。但是,我希望能够执行以下操作: 有没有一种干净的方法可以执行此操作, 而不会 涉及捕获异常并为“ unhashable type”解析消息字符串? 问题答案: 从Python

  • SHA1散列经常用来计算二进制或者大文本数据的短标识值。git版本控制系统用SHA1来标识受版本控制的文件和目录。这里介绍Go中如何计算SHA1散列值。 Go在crypto/*包里面实现了几个常用的散列函数。 package main import "crypto/sha1" import "fmt" func main() { s := "sha1 this string" //