Как добавить только уникальные значения в анонимный массив, используемый в качестве значения хеша? - PullRequest
0 голосов
/ 25 марта 2010

РЕДАКТИРОВАТЬ Извините, я забыл самую важную часть здесь.Каждая клавиша может иметь более одного значения.Извинения тем, кто уже ответил.print и join будут использоваться позже для печати нескольких значений для $key в одной строке.

В приведенном ниже примере кода, предполагая, что значение $keyvalue постоянно меняется, я пытаюсьиспользовать одну строку (или что-то подобное), чтобы проверить и проверить, существует ли текущий $keyvalue.Если это так, то ничего не делать.Если это не так, то нажмите его.Эта строка будет находиться в операторе while, поэтому ее необходимо заключить в несколько строк.

Сохранение порядка не имеет значения, если нет повторяющихся значений.

my $key = "numbers";
my $keyvalue = 1;

my %hash = ($key => '1');

push (@{$hash{$key}}, $keyvalue) unless exists $hash{$key};

Я не получаю никаких ошибок с use strict; use warnings;, но в то же время это не работает.В приведенном выше примере я ожидал бы, что, поскольку значение по умолчанию 1, $keyvalue не будет выдвигаться, так как оно также 1.Возможно, я все обернулся ...

Есть ли какие-то корректировки, чтобы заставить это работать или какие-то альтернативы, которые можно использовать вместо этого для достижения того же самого?

Ответы [ 3 ]

5 голосов
/ 25 марта 2010

Самый простой способ - поместить анонимный хеш в $hash{$key}. Вы заботитесь только о ключах этого анонимного хэша.

#!/usr/bin/perl

use strict; use warnings;

my %hash;

while ( my $line = <DATA> ) {
    chomp $line;
    my ($key, $val) = split /\s*=\s*/, $line;
    $hash{$key}{$val} = undef;
}

for my $key ( keys %hash ) {
    printf "%s : [ %s ]\n", $key, join(' ', keys %{ $hash{$key} });
}

__DATA__
key = 1
key = 2
other = 1
other = 2
key = 2
key = 3

На выходе key = 2 появляется только один раз:

C:\Temp> h
other : [ 1 2 ]
key : [ 1 3 2 ]
3 голосов
/ 25 марта 2010

Вы можете просто сделать:

$hash{$key} = $keyvalue unless exists $hash{$key};

Это добавит ключ, пару значений ($key,$keyvalue), только если ключ еще не присутствует в хэше.

0 голосов
/ 25 марта 2010

Вы не push значения в хеш, так как хэш нуждается в парах ключ / значение, а push только добавляет значение. В вашем выражении вы воспринимаете $hash{$key} как ссылку на массив, к которому хотите добавить значение. Вы просто должны присвоить значение хешу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...