繁体   English   中英

如何在Perl哈希哈希中按值访问密钥?

[英]How do I access keys by value in a Perl hash of hashes?

我有这样的哈希哈希:

$hashtest{ 1 } = {
  0 => "A",
  1 => "B",
  2 => "C"
};

例如,如何获取hash {1}的B值?

$hashtest{'B'}{1}

其他人提供了众所周知的鱼

Perl有免费的在线(在您的命令提示符下)文档。 以下是一些相关链接:

Perldoc Perlreftut

Perldoc Perldsc

参考快速参考(PerlMonks)

根据您对其他响应的评论,您可以反转哈希(即交换键和值)。

但是只有当您确定原始值中没有重复的值时,请谨慎执行此操作,因为此操作仅保留其中一个值。

#!/usr/bin/perl 
use 5.10.1;
use warnings;
use strict;

my %hashtest;
$hashtest{ 1 } = { 0 => "A", 1 => "B", 2 => "C" };
my %rev = reverse %{$hashtest{1}};
say $rev{B};

输出:

1个

$hashtest{ 1 } = { 0 => "A", 1 => "B", 2 => "C" };

my $index;
my $find = "B";
foreach my $key (keys %{ $hashtest{1} }) {
    if($hashtest{1}{$key} eq $find) {
        $index = $key;
        last;
    }
}

print "$find $index\n";

我认为,由于您使用数字作为哈希键,因此应该使用数组。 否则,当反转哈希时,您将丢失重复的密钥。

样例代码:

use strict;
use warnings;

use List::MoreUtils 'first_index';

my $find  = 'A';
my @array = qw{ A B C };
my $index = first_index { $_ eq $find } @array;

Perl数据结构手册将帮助您了解Perl中的数据结构。

如果所有键都是整数,则很可能要处理数组而不是散列:

$array[1] = [ qw( A B C ) ];  # Another way of saying [ 'A', 'B', 'C' ]

print $array[1][1];           # prints 'B'
$hashtest{1}{1};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM