Schrift
[thread]7100[/thread]

Bestimmte Keys in anderen Hash kopieren (Seite 2)



<< |< 1 2 >| >> 13 Einträge, 2 Seiten
Taulmarill
 2005-07-05 15:54
#55969 #55969
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
was hälst du von:
Code: (dl )
1
2
3
4
5
sub hashCopyByKey {
my ($to, $from, @key) = @_;
@key = grep{ exists $from->{$_} } @key;
@{$to->{@key}} = @{$from->{@key}};
}

das verhält sich wie deine funktion, überprüft aber nur die existenz des keys in einer schleife und erledigt die zuweisung in einem rutsch.

die argumentation, dass sich die funktion von der syntax an push anlehnt ist gar nicht so abwegig, gefällt mir ganz gut.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Ronnie
 2005-07-05 16:04
#55970 #55970
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

my @sel_keys = qw/red green/;
my %hash_source = ( red => '#ff0000', green => '#00ff00', blue => '#0000ff', );

my %hash_target = hashAssignByKeys(\%hash_source, @sel_keys);
print Dumper \%hash_target;
exit;

sub hashAssignByKeys {
my ($source, @keys) = @_;
map { $_, $source->{$_} } grep { exists $source->{$_} } @keys;
}

EDIT1: Ist fast das gleiche wie Taulmarills Lösung, nur in einem Rutsch und als Zuweisung.\n\n

<!--EDIT|Ronnie|1120565151-->
Taulmarill
 2005-07-05 18:20
#55971 #55971
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
ein wichtiger unterschied ist hier, dass das zielhash dabei alle alten werte verliert, da die zuweisung den ganzen hash, und nicht nur einen hashslice betrifft.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2005-07-04 17:08.