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

Trickkiste: join Hash-Keys

Leser: 1


<< |< 1 2 >| >> 19 Einträge, 2 Seiten
bloonix
 2006-07-17 15:41
#68144 #68144
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Hallo,

wie kann ich eine Liste direkt hinter join generieren, anstatt eine
Liste in der Form von @array zu übergeben?

Beispiel:

Code: (dl )
1
2
3
4
5
6
7
8
9
my %hash = (
val1 => 1,
val2 => 2,
val3 => 3,
);

for my $key (keys %hash) {
print ",$key:$hash{$key}";
}


Die Ausgabe kann ich aber leider wegen des führenden Kommatas nicht
gebrauchen. Optimal wäre also die Verwendung von join, nur wie
könnte man das lösen?

Ich hatte mir etwas in der Form von

Code: (dl )
print join(",", (print "$_:$hash{$_}" for keys %hash));


aber das funktioniert natürlich nicht.

Die Ausgabe sollte also folgende sein:

val1:1,val2:2,val3:3

Greez,
opi
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
Linuxer
 2006-07-17 15:46
#68145 #68145
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
ungetestet:

Code: (dl )
print join( ',', map { "$_:$hash{$_}" } keys %hash );


[edit]code tags gesetzt[/edit]\n\n

<!--EDIT|Linuxer|1153136822-->
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
Crian
 2006-07-17 15:47
#68146 #68146
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Code: (dl )
1
2
3
4
5
6
7
my %hash = (
val1 => 1,
val2 => 2,
val3 => 3,
);

print join ',', map {$a = "$_:$hash{$_}";$a} sort keys %hash;


Ausgabe

Code: (dl )
val1:1,val2:2,val3:3
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Crian
 2006-07-17 15:49
#68147 #68147
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
[quote=Linuxer,17.07.2006, 13:46]
Code: (dl )
print join( ',', map { "$_:$hash{$_}" } keys %hash );
[/quote]
Ohne Sort tut es nicht das gewünschte :-)
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Linuxer
 2006-07-17 15:53
#68148 #68148
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
[quote=Crian,17.07.2006, 13:49][quote=Linuxer,17.07.2006, 13:46]
Code: (dl )
print join( ',', map { "$_:$hash{$_}" } keys %hash );
[/quote]
Ohne Sort tut es nicht das gewünschte :-)[/quote]
Jo,
ein Sort war auch nicht explizit verlangt, habe ich jedenfalls nicht daraus lesen.
Dann schreib ein sort zwischen das map argument und keys ;o)
Oder lass es nach dem map sortieren, sollte auch funktionieren ;o)\n\n

<!--EDIT|Linuxer|1153137412-->
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
bloonix
 2006-07-17 15:54
#68149 #68149
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Mit map... dass hätte ich mir denken können und es mal selber
versuchen sollen! *ARGH*

Danke!
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
esskar
 2006-07-17 15:56
#68150 #68150
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
so tut es es zumindest das selbe wie for-schleife von opi
Code: (dl )
1
2
3
4
5
6
my %hash = (
val1 => 1,
val2 => 2,
val3 => 3,
);
print join( ',', map { my $x = "$_:$hash{$_}"; $x } keys %hash );
bloonix
 2006-07-17 16:00
#68151 #68151
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Ein Sort ist nicht notwendig, ich hatte die Keys rein zufällig in der richtigen
Reihenfolge aufgelistet :-)

Hintergrund ist:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
while (my $row = $sth->fetchrow_hashref) {
for my $db (@{$where{NEW_DB}}) {
$row->{Db} = $db;
for my $user (@{$where{NEW_USER}}) {
$row->{User} = $user;
print "INSERT INTO DB ";
print join(",", map { "$_:'$row->{$_}'" } keys %{$row});
print ";\n";
}
}
}


Ich bin zufrieden.
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
Crian
 2006-07-17 16:28
#68152 #68152
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
[quote=esskar,17.07.2006, 13:56]so tut es es zumindest das selbe wie for-schleife von opi
Code: (dl )
1
2
3
4
5
6
my %hash = (
val1 => 1,
val2 => 2,
val3 => 3,
);
print join( ',', map { my $x = "$_:$hash{$_}"; $x } keys %hash );
[/quote]
Vergleich das mal mit meinem Vorschlag :-)
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
esskar
 2006-07-17 16:31
#68153 #68153
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
@crian: das $a find ich hässlich :) und ich hab kein sort!
<< |< 1 2 >| >> 19 Einträge, 2 Seiten



View all threads created 2006-07-17 15:41.