Как получить доступ к ключам по значению в хэше Perl? - PullRequest
0 голосов
/ 15 октября 2010

У меня есть такой хеш хэша:

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

Например, как я могу взять значение B хэша {1}?

$hashtest{'B'}{1}

Ответы [ 6 ]

3 голосов
/ 15 октября 2010

Согласно вашему комментарию к другим ответам, вы можете изменить хеш (т. Е. Обмен ключами и значениями).

Но будьте внимательны, если вы уверены, что нет повторяющихся значенийв оригинале, поскольку эта операция содержит только один из них.

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

3 голосов
/ 15 октября 2010

Другие предоставили пресловутую рыбу

Perl имеет бесплатную онлайн (и по вашей командной строке) документацию.Вот некоторые соответствующие ссылки:

perldoc perlreftut

perldoc perldsc

Ссылки Краткое руководство (PerlMonks)

1 голос
/ 15 октября 2010
$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";
0 голосов
/ 15 октября 2010

Если все ваши ключи целые числа, вы, скорее всего, хотите иметь дело с массивами, а не с хешами:

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

print $array[1][1];           # prints 'B'
0 голосов
/ 15 октября 2010

Поскольку вы использовали числа для своих хеш-ключей, по моему мнению, вам следует вместо этого использовать массив. В противном случае при обращении хэша вы потеряете дубликаты ключей.

Пример кода:

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.

0 голосов
/ 15 октября 2010
$hashtest{1}{1};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...