如何在散列的Perl散列中按值访问键?

时间:2010-10-15 13:30:06

标签: perl hash

我像这样哈希哈希:

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

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

$hashtest{'B'}{1}

6 个答案:

答案 0 :(得分:3)

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

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

perldoc perlreftut

perldoc perldsc

References Quick Reference (PerlMonks)

答案 1 :(得分:3)

根据您对其他回复的评论, 你可以反转哈希(即交换密钥和值)。

但是只有在你确定的情况下才要小心这样做 原件中没有重复的值 因为此操作只保留其中一个。

#!/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

答案 2 :(得分: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";

答案 3 :(得分:0)

由于您使用了哈希键的数字,在我看来,您应该使用数组。否则,当反转哈希时,您将丢失重复的密钥。

示例代码:

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 Data Structures Cookbook将帮助您了解Perl中的数据结构。

答案 4 :(得分:0)

如果你的所有键都是整数,那么你很可能想要处理数组而不是哈希:

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

print $array[1][1];           # prints 'B'

答案 5 :(得分:-1)

$hashtest{1}{1};