Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6431[/thread]

Arrays und Hashs



<< |< 1 2 >| >> 16 Einträge, 2 Seiten
jan10001
 2004-07-26 10:48
#84924 #84924
User since
2003-08-14
962 Artikel
BenutzerIn
[default_avatar]
Gibt es ne einfache Möglichkeit zwei Hashs zu verschmelzen?
z.B. aus Hash1 (2 Key/Werte Paare) und Hash2 (5 Key/Werte Paare) wird ein neuer Hash mit 7 Key/Werte Paaren

Und was mich besonders interessiert kann man auf einfache Weise zwei Arrays verschmelzen?\n\n

<!--EDIT|jan10001|1090824565-->
kabel
 2004-07-26 10:53
#84925 #84925
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
Quote
kabel@kabelskiste:~$ perl
%hash1 = (1 .. 8 );
%hash2 = (4 .. 11);

@hash2{keys %hash1} = values %hash1;

foreach (keys %hash2) {
print $_, $hash2{$_}, $/;
}

89
67
12
45
34
78
1011
56
kabel@kabelskiste:~$

hierbei ueberdeckt %hash1 schluessel aus %hash2

zu arrays: willste doppelte eintraege behalten oder net?
-- stefan
renee
 2004-07-26 10:58
#84926 #84926
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
my %hash1 = (key1 => 'value1',
key2 => 'value2');
my %hash1 = (key3 => 'value3',
key4 => 'value4');
my %hash_gesamt = (%hash1,%hash2);
#oder
%hash1 = (%hash1,%hash2);


Code: (dl )
1
2
3
4
5
6
my @array = (1..4);
my @array2 = (5..11);
#entweder
my @array3 = (@array,@array2);
#oder
push(@array,@array2);
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
jan10001
 2004-07-26 11:02
#84927 #84927
User since
2003-08-14
962 Artikel
BenutzerIn
[default_avatar]
Die Arrays enthalten in jeden Element einen Hash und nun möchte ich beide Arrays verbinden und zeitgleich auch die Hashs.

z.B.
Array1 Element1 -> Inhalt ein Hash mit 2 Key/Werte Paaren
und Array2 Element1 -> Inhalt ein Hash mit 3 Key/Werte Paaren
zu ArrayNeu Element1 -> Hash mit 5 Key/Werte Paaren

Verstehtst du? Dabei muß ich allerdings auch beachten das beide Arrays nicht unbedingt die gleiche Anzahl an Elementen haben müssen.\n\n

<!--EDIT|jan10001|1090825387-->
kabel
 2004-07-26 11:22
#84928 #84928
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
also:

die kleiner der beiden arraylaengen ist
Code (perl): (dl )
my $size = (@a1>@a2?@a2:@a1);

dann irgendwie ueber die werte 1 bis $size laufen
und dann die hashes dereferenziert mergen.
-- stefan
renee
 2004-07-26 11:31
#84929 #84929
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#! /usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my @array = ({key1 => 'value1',
              key2 => 'value2'});
my @array2 = ({key3 => 'value3',
              key4 => 'value4'},
             {key5 => 'value5'});

my @new_array = @{join_arrays(\@array,\@array2)};

print Dumper(\@new_array);

sub join_arrays{
 my ($ar1ref,$ar2ref) = @_;
 my @array = ();
 if(scalar(@{$ar2ref}) > scalar(@{$ar1ref})){
   my $tempref = $ar2ref;
   $ar2ref = $ar1ref;
   $ar1ref = $tempref;
 }
 for(0..(scalar(@{$ar1ref}) - 1)){
   $array[$_] = ${$ar1ref}[$_];
   %{$array[$_]} = (%{$array[$_]},%{${$ar2ref}[$_]}) if(${$ar2ref}[$_]);
 }
 return \@array;
}
\n\n

<!--EDIT|renee|1090827128-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
kabel
 2004-07-26 11:36
#84930 #84930
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
ich habe die hash merge methoden ins wiki gestellt.
http://wiki.perl-community.de/bin/view/Wissensbasis/HashMerges
bei naeherer betrachtung sieht meine methode perliger aus, aber deine ist wesentlich praktischer ;-)
-- stefan
betterworld
 2004-07-26 12:00
#84931 #84931
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=kabel,26.07.2004, 08:53]@hash2{keys %hash1} = values %hash1;[/quote]
oh oh oh oh
Man sollte sich eigentlich nicht darauf verlassen, dass keys und values beides Male die gleiche Reihenfolge liefern. Vorsichtiger waere
Code: (dl )
1
2
my @keys = keys %hash;
@hash2{@keys}=@hash1{@keys}
\n\n

<!--EDIT|betterworld|1090829361-->
betterworld
 2004-07-26 12:03
#84932 #84932
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Sorry, ich habe es gerade nachgelesen, es sollte doch richtig sein:
[quote=perldoc -f keys, ]
The actual random order
is subject to change in future versions of perl, but it is guaranteed to be
the same order as either the "values" or "each" function produces (given that
the hash has not been modified)
[/quote]\n\n

<!--EDIT|betterworld|1090829147-->
pq
 2004-07-26 12:08
#84933 #84933
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=betterworld,26.07.2004, 10:00]
oh oh oh oh
Man sollte sich eigentlich nicht darauf verlassen, dass keys und values beides Male die gleiche Reihenfolge liefern.[/quote]
doch, das kann man:
perldoc -f values:
"The values are returned in an apparently random
order.  The actual random order is subject to
change in future versions of perl, but it is guar-
anteed to be the same order as either the "keys"
or "each" function would produce on the same
(unmodified) hash.
"
edit: da warst du wohl schneller =)\n\n

<!--EDIT|pq|1090829366-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< |< 1 2 >| >> 16 Einträge, 2 Seiten



View all threads created 2004-07-26 10:48.