perl - 按值和键对哈希进行排序(按顺序)

标签 perl sorting hash

我正在寻找一种好方法,在 Perl 中先按值排序,然后再按键排序。

示例:

 my %userids = (
  williams => "Marketing",
  smith    => "Research",
  johnson  => "Research",
  jones    => "Marketing",
  brown    => "Marketing",
  davis    => "Research"
);

输出:

Marketing: brown
Marketing: jones
Marketing: williams
Research: davis
Research: johnson
Research: smith

请注意,是第一个排序级别。第二个排序级别是。知道如何以优雅且高性能的方式做到这一点吗?谢谢!

最佳答案

很好的引用:http://www.misc-perl-info.com/perl-sort.html#shv

#!/usr/bin/perl

my %userids = (
    williams => "Marketing",
    smith    => "Research",
    johnson  => "Research",
    jones    => "Marketing",
    brown    => "Marketing",
    davis    => "Research"
);

foreach (sort { ($userids{$a} cmp $userids{$b}) || ($a cmp $b) } keys %userids) 
{
    print "$_: $userids{$_}\n";
}

关于perl - 按值和键对哈希进行排序(按顺序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7791958/

相关文章:

php - 这个 perl 正则表达式的 PHP 等价物是什么

python - 使用特定维度作为键对已排序列表进行排序

c# - 如何对 IEnumerable 列表进行排序?

java - java comparable上的排序算法问题

mysql - fork 还是不 fork ?

perl - 在 Perl 中,如何用零填充数组?

perl - 通过变量引用一个类,perl

python - "TypeError: unhashable type: ' slice'"是什么意思?我该如何修复它?

ruby - 使用特定规则拆分字符串的最干净的 ruby​​ 代码

c++ - 如何确定机器的字长以便使用哈希函数?