【问题标题】:Printing perl hash keys and values sorted by value打印按值排序的 perl 哈希键和值
【发布时间】:2014-10-02 17:17:45
【问题描述】:

我已经通过value 订购了我的hashmap 并正在打印它们。打印完值后,想打印对应的key

我的代码目前是:

foreach my $value (sort (values %student_id_name_hash)){
   print "$value\n";
   // Print correspnding key here
}

我正在尝试打印唯一的学生 ID (keys) 和相应的学生姓名 (values),这可能不是唯一的。

这里建议了一种涉及reverse 但取决于唯一值的方法:http://www.perlmonks.org/?node_id=177969

这是最好的方法吗?在我的情况下,不能保证这些值是唯一的。

【问题讨论】:

  • Perl 使用散列,而不是散列映射。

标签: perl hash


【解决方案1】:

如果您需要键和值,则需要根据键进行迭代并根据值进行排序,如下所示:

for my $key ( sort { $student_id_name_hash{$a} cmp $student_id_name_hash{$b} }
    keys %student_id_name_hash )
{
    print "$key - $student_id_name_hash{$key}\n";
}

【讨论】:

  • 完美。谢谢米勒。请问$a$b 指的是什么?我不明白具体比较的是什么。
  • @Giri - 检查过去几天的 perl 问题——它们一直是热门话题。
  • @Giri 学习perldoc sort。它将介绍如何使用 $a$b,这比我能想到的任何 500 个字符的评论都要好。
【解决方案2】:

您可以根据与键关联的值对键进行排序

# standard good practice pragmas
use strict; use warnings; use utf8;

# sample/test data
my %id_hash = (
  X1 => 'Smith, Jane',
  Z9 => 'Doe, John',
);

# sort keys based on value and print
foreach my $key (sort {$id_hash{$a} cmp $id_hash{$b}} keys %id_hash ){
  my $value = $id_hash{$key};
  print "$value\n  $key\n";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 2011-10-27
    • 2018-07-21
    • 1970-01-01
    • 2017-09-30
    相关资源
    最近更新 更多