Как мне перебрать хеш? - PullRequest
       44

Как мне перебрать хеш?

2 голосов
/ 04 апреля 2011

Учитывая следующую переменную:

$test = {
  '1' => 'A',
  '2' => 'B',
  '3' => 'C',
  '4' => 'G',
  '5' => 'K',
}

Как можно выполнить цикл по всем назначениям, не зная, какие ключи у меня есть?

Я хотел бы заполнить поле выбора с результатами в качестве метки иключи как скрытые значения.

Ответы [ 3 ]

5 голосов
/ 04 апреля 2011

Просто сделайте цикл foreach на клавишах:

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

my $test = {
  '1' => 'A',
  '2' => 'B',
  '3' => 'C',
  '4' => 'G',
  '5' => 'K',
};

foreach my $key(keys %$test) {
    print "key=$key : value=$test->{$key}\n";
}

выход:

key=4 : value=G
key=1 : value=A
key=3 : value=C
key=2 : value=B
key=5 : value=K
4 голосов
/ 05 апреля 2011

Вы можете использовать встроенную функцию each:

while (my ($key, $value) = each %$test) {
  print "key: $key, value: $value\n";
}
3 голосов
/ 04 апреля 2011

Вы можете узнать, какие ключи у вас есть с keys

my @keys = keys %$test; # Note that you need to dereference the hash here

Или вы можете сделать все за один проход:

print map { "<option value='$_'>$test->{$_}</option>"  } keys %$test;

Но вы, вероятно, захотите какой-то заказ:

print map { "<option value='$_'>$test->{$_}</option>"  } sort keys %$test;

… и вам почти наверняка будет лучше переместить генерацию HTML в отдельную систему шаблонов .

...