Come si aggiunge l'hash a all'hash b in Perl senza utilizzare un ciclo?Come posso unire due hash in Perl senza usare un loop?
risposta
Se si intende prendere l'unione dei loro dati, basta fare:
%c = (%a, %b);
Perché non% a = (% a,% b); lavoro? % a viene "cancellato" – biznez
Funziona per me: "% a = ('a' => 'b', 'c' => 1);% b = ('c' => 'd');% a = (% a,% b); print join (',', map {"'$ _' => \" $ {a {$ _}} \ ""} chiavi% a), "\ n"; " Gli articoli da% b con la stessa chiave hanno la precedenza, ma dopo il sindacato sono presenti altri elementi da% a. – outis
@yskhoo: funziona. – ysth
È anche possibile utilizzare le fette di fondere un hash in un altro:
@a{keys %b} = values %b;
Nota che gli elementi in% b sarà sovrascrivi gli elementi in% a che hanno la stessa chiave.
Per credito extra, con un ref hash in aeb, facciamo @ {$ a} {chiavi% $ b} = valori% $ b; – daotoad
Mi aspetto che questo sia più efficiente dell'altra risposta, perché quello ricrea l'hash anche per gli elementi già esistenti, mentre questo aggiunge solo le chiavi per i nuovi elementi. Se c'erano molti articoli in% a, rispetto a% b, la differenza può essere rispettabile. – bart
Forse. Il mio approccio percorre anche% b due volte. Se% b è maggiore di% a, l'altra tecnica potrebbe essere più veloce. Il più veloce di tutti potrebbe essere un ciclo, ma l'OP non lo voleva. – outis
Questo unirà gli hash e terrà conto anche delle voci non definite, in modo che non sostituiscano il contenuto.
my %hash = merge(\%hash1, \%hash2, \%hash3);
sub merge {
my %result;
%result = %{ $_[0] };
shift;
foreach my $ref (@_) {
for my $key (keys %{$ref}) {
if (defined $ref->{$key}) {
$result{$key} = $ref->{$key};
}
}
}
return %result;
}
my %c = %a;
map {$c{$_} = $b{$_}} keys %b;
- 1. Come posso assegnare due array a un hash in Perl?
- 2. Come posso filtrare un array senza usare un loop in Perl?
- 3. Come faccio a confrontare due hash in Perl senza usare Data :: Compare?
- 4. Come posso convertire un array in un hash in Perl?
- 5. Come unire due hash che hanno stesse chiavi in rubino
- 6. Come inserire hash in hash in Perl
- 7. Filtrare un hash di hash in perl
- 8. Come unire più hash?
- 9. Loop infinito in perl
- 10. Dovrei usare $ hash {"stringa"} o $ hash {stringa} in Perl?
- 11. Come cancellare un hash Perl
- 12. In loop attraverso una serie di hash in Perl
- 13. Come posso unire due percorsi in C#?
- 14. Come posso resettare completamente un hash senza usare un ciclo for?
- 15. Come posso verificare che "qualcosa" sia un hash in Perl?
- 16. Come posso passare un hash a una funzione in Perl?
- 17. Come posso creare un nuovo riferimento hash vuoto in Perl?
- 18. Come posso includere dinamicamente i moduli Perl senza usare eval?
- 19. Come posso installare il modulo Perl senza usare CPAN.pm?
- 20. Come posso unire due array in un dizionario?
- 21. Come posso ordinare un hash di hash per chiave in Perl?
- 22. Come posso usare un codice ref come callback in Perl?
- 23. Come unire due rami senza un antenato comune?
- 24. Come posso usare gli hash come argomenti per le subroutine in Perl?
- 25. In Perl, come posso usare Tie :: IxHash con un dizionario mentre 'use strict' è attivo?
- 26. Inversione un hash più valori in Perl
- 27. Come posso rappresentare i collegamenti simbolici di un file system in un hash Perl?
- 28. Come posso unire due alberi binari
- 29. Come posso costruire un hash Perl nel codice C?
- 30. Come posso accedere al conteggio ref di un hash Perl?
Perché non si desidera utilizzare un ciclo? –