Czy w haasie mogą znajdować się zduplikowane klucze lub wartości?Czy w haasie mogą znajdować się zduplikowane klucze lub wartości?
Odpowiedz
może zawierać zduplikowane wartości, ale nie klucze.
Przesyłam zlecenie na podstawie twojego 14.5 tys. Powt. Haha, należycie cytowane, ale jeśli tak, prawdopodobnie za chwilę usłyszysz od mojego wykładowcy ... – lol
Zakładając mówić o "% hash"
wówczas:
- zduplikowane klucze nie są dozwolone.
- Możliwe wartości duplikatów.
Łatwo to rozumieć o ponieważ jest odwzorowaniem z szczególności kluczem do szczególności Wartość gdzie wartość nie odgrywa żadnej roli w look-up, a tym samym jest niezależny od innych wartości.
Dla obu skrótów i tablic tylko jeden skalar może być przechowywany pod danym kluczem. („Klucze są wyjątkowe”). Jeśli one nie były, nie można zrobić
$h{a} = 1;
$h{a} = 2;
$val = $h{a}; # 2
$a[4] = 1;
$a[4] = 2;
$val = $a[4]; # 2
Jeśli chcesz przypisać wiele wartości klucza, można złożyć odwołanie do tablicy (lub hash) na ten klucz i dodaj wartość do tej tablicy (lub hash).
for my $n (4,5,6,10) {
if ($n % 2) {
push @{ $nums{odd} }, $n;
} else {
push @{ $nums{even} }, $n;
}
}
say join ', ', @{ $nums{even} };
Aby uzyskać więcej informacji, zobacz perllol.
Jeśli chodzi o wartości, wiele elementów może mieć tę samą wartość zarówno w hasłach, jak i tablicach.
$counts{a} = 3;
$counts{b} = 3;
$counts[5] = 3;
$counts[6] = 3;
Możesz spróbować użyć modułu Hash::MultiKey z CPAN.
(użyłem Dane :: Dumper, aby pokazać jak to dokładnie wygląda hash - nie ma potrzeby tutaj)
use Data::Dumper;
use Hash::MultiKey;
tie my %multi_hash, 'Hash::MultiKey';
$multi_hash{['foo', 'foo', 'baz']} = "some_data";
for (keys %multi_hash) {
print @$_,"\n";
};
print Dumper\%multi_hash;
a wyjście shoud być():
foofoobaz
$VAR1 = {
'ARRAY(0x98b6978)' => 'some_data'
};
więc technicznie rzecz biorąc Hash :: MultiKey pozwala ci tworzyć referencje jako klucz skrótu.
Spróbuj uruchomić ten kod, uruchamia się bez błędów. Mam nadzieję, że właśnie o to prosiliście!
#!/usr/bin/perl
use strict;
use warnings;
my %hash = ('a' => 1, 'a' => 2, 'b' => 4);
print values %hash, "\n\n";
print keys %hash, "\n\n";
Tak hash może mieć duplikaty kluczy jak wykazać poniżej ...
Kluczowym przykładem: Data urodzenia | LastNameFirst4Chars | FirstNameInitial | IncNbr "19.12.1959 | Will | K | 1". .. "1959-12-19 | Will | K | 74".
Uwaga: Może to być użyteczne dla upy Key rekord wygląd jeśli ktoś nie pamięta ich Social Security NBR
#-- CODE SNIPPET:
@Offsets=(); #-- we will build an array of Flat File record "byte offsets" to random access
#-- for all records matching this ALT KEY with DUPS
for ($i=1; $i<=99; $i++) {
$KEY=$BirthDate . "|" . $LastNameFirst4Chars . "|" . $FirstNameInitial . "|" . $i;
if (exists $Hash{$KEY}) {
push @Offsets, $Hash{$KEY}; #-- add another hash VALUE to the end of the array
}
}
Co to pokazuje? Po uruchomieniu kodu zarówno '@ Offsets' i'% Hash' pozostają niezmienione (tzn. Nadal puste). Kod po prostu generuje 99 _różnych_ wartości dla zmiennej '$ KEY', takich jak' blabla | 1', 'blabla | 2', ...' blabla | 99'. – PerlDuck
OK, ale standardowe skróty w Perlu na pewno nie mogą mieć duplikatów kluczy. Klucze z twojego przykładu są różne. '" $ BirthDate | ... | 1 "' różni się od '" $ BirthDate | ... | 2 "', czyż nie? Więc klucze nie są _ duplikowane. – PerlDuck
PerlDuck, numer kolejny czyni klucz unikalnym. Jeśli mam unikalny klucz podstawowy, powiedzmy numer ubezpieczenia społecznego. Chcę uzyskać dostęp do rekordu w mojej bazie danych, ale SSN nie jest pamiętany, wtedy mogę użyć klawisza ALT w/DUPS, takiego jak: "$ BirthDate | $ LastNameFirst4Chars | $ FirstNameInitial | SeqNbr". "1959-12-19 | Will | K | 1 ..." 1959-12-19 | Will | K | 99 "Wszystkie dane w kluczu są duplikowane z wyjątkiem sekwencji nbr. W ten sposób włączasz haszowanie mieć zduplikowane klucze. –
Czy chodziło Ci tabeli mieszania? –
Oh nie zdawałem sobie sprawy, że hasz to nazwa Perla dla tablic asocjacyjnych (dziwne). –
@Jake T., Tablice asocjacyjne Perl są tablicami mieszającymi – ikegami