2017-02-08 3 views
0

Я хочу, чтобы петли в течение двух хэшей как-то так, что если ключи Hash А, равны значения хэш-B, а затем сделать что-то:Perl: цикл по два хэши

например.

my $hash1 = { 
    'STRING_ID1' => {default => 'Some string'}, 
    'STRING_ID3' => {default => 'Some string'}, 
    'STRING_ID5' => {default => 'Some string'}, 
    'STRING_ID7' => {default => 'Some string'}, 
}; 

my $hash2 = { 
    content => 'STRING_ID', 
    content1 => 'Some text that doesn't equal an ID', 
    content2 => 'STRING_ID_5', 
    content3 => 'STRING_ID_8', 
}; 

Если эти значения равны, то я хочу вызвать службу, которая получает меня локализованной строки

Единственный способ, которым я могу думать:

while (($key, $value) = each (%hash1, %hash2)) { 
    if ($key eq $value) { 

     $service->getLocalizedString($key); 

    } 
} 
+3

Нет, я не следую. Первый бит - на самом деле не действительный perl. Ваши выборочные данные слишком малы, чтобы понять, что вы на самом деле имеете в виду. (хэш элемента). Не могли бы вы уточнить, что вы пытаетесь сделать? – Sobrique

+0

Я буду использовать больше данных образца, но я хочу, чтобы цикл хэш1 и хеш2 одновременно совпадали с ключом одного со значением другого. – snakespan

+0

Добавлены дополнительные данные образца. Я хочу сопоставить первичные нумерованные ключи хэша 1 со случайными значениями hash2. – snakespan

ответ

4

Поскольку они хэши, вам не нужно использовать цикл, чтобы выполнить поиск по ключу.

while (my ($key2,$value2) = each %$hash2) { 
    if (exists $hash1->{$value2}) { 
     print "($key2,$value2) from \$hash2 "; 
     print "matches ($value2,$hash1->{$value2}) from \$hash1\n"; 
    } 
} 
+0

То, что мне нужно, спасибо! – snakespan

+0

@snakespan: Если это то, что вы имели в виду, тогда вы должны принять к сведению ** комментарий tripleee's ** под своим вопросом. – Borodin

1

Насколько я понимаю, вопрос, который вы хотите проверить, если% hash1 содержит элемент с заменой строки, для идентификаторов, перечисленных в значениях в% hash2?

while (my ($key,$value) = each(%$hash2)) { 
    # check if we have an entry in $hash1 
    if (exists $hash1->{$value}) {  
     # call service with the STRING_ID as argument 
     $service->getLocalizedString($value); 
    } else { 
     # nothing found 
    } 
} 
+0

Цените ответ! – snakespan

+0

@snakespan: Вы видите, как трудно было понять ваше намерение? Люди с низким опытом счастливы попробовать свои силы в ответах на такие вещи, потому что им нечего терять, и я удивлен, что ** mob ** считает, что он может предложить решение без дополнительной информации. Для чего это стоит, мое первое предположение было таким же, как ** STF **. Пожалуйста, объясните (отредактировав свой вопрос), что вы имели в виду, например, «STRING_ID1» => {default «Некоторая строка»} ', которая не компилируется? – Borodin

+0

Я - шепот Перлоноба. – mob

Смежные вопросы