Schrift
[thread]12975[/thread]

Hashkeys filtern

Leser: 2


<< >> 6 Einträge, 1 Seite
pktm
 2009-01-10 15:50
#117822 #117822
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!

Ich habe eine Hash, der Schlüssel mit einem bestimmten Präfix und andere enthält. An einer Stelle in meinem Skript steht nun in einer Ausgabe: print "bla: " . (join", ", keys(%mnemotisch));

Wie kann ich nur Schlüssel des Hashes ausgeben, die ein bestimmtes Präfix haben?

Mein Ansatz ist grep:
Code: (dl )
print (join", ", grep(/^prefix_/, keys(%mnemotisch)));


Geht das noch schöner?

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
Linuxer
 2009-01-10 16:13
#117823 #117823
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Bis auf das Weglassen der Klammern, kaum.

Mein persönlicher Favorit wäre:
Code: (dl )
print join ', ', grep { m/^prefix_/ } keys %hash;


Um bei Deinem zu bleiben:
Code: (dl )
1
2
3
print join( ', ', grep( m/^prefix_/, keys %hash ) );
#oder
print join( ', ', grep m/^prefix_/, keys %hash );


edit:
Variationen eingefügt; ' ' durch ', ' ersetzt
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!
GwenDragon
 2009-01-10 16:15
#117824 #117824
User since
2005-01-17
14757 Artikel
Admin1
[Homepage]
user image
Ist doch gut so.
Ich weiß ja nicht, was du mit schön meinst.
Besser lesbar? Best Practises-Style?

Obwohl du so manche Klammer weglassen kannst.

Aber kürzer geschrieben gehts:
Code: (dl )
print join", ",grep/^prefix_/,keys%mnemotisch;
pktm
 2009-01-10 17:11
#117825 #117825
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Ja, schöner im Sinne von lesbarer. Eventuell gibts noch andere Befehle dafür?
Ansonsten lasse ich das jetzt so. Ich glaube, die Frage resultiert hauptsächlich daraus, dass ich noch nie viel mit grep gearbeitet habe.
http://www.intergastro-service.de (mein erstes CMS :) )
#Kein Kommentar
 2009-01-10 17:20
#117826 #117826
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
vielleicht so?

Code: (dl )
1
2
3
4
5
6
7
my %hash = ('prefix_1' => 1, 'test_2' => 2);
my @keys;
foreach (keys %hash){
push(@keys, $_) if /^prefix_/;
}

print "Ergebnis: @keys";


aber grep macht eigentlich genau das.
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
LanX-
 2009-01-10 18:48
#117832 #117832
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
pktm+2009-01-10 16:11:50--
Ja, schöner im Sinne von lesbarer. Eventuell gibts noch andere Befehle dafür?
Ansonsten lasse ich das jetzt so. Ich glaube, die Frage resultiert hauptsächlich daraus, dass ich noch nie viel mit grep gearbeitet habe.


kürzer, perlischer gehts imho nicht, lesbarer wirds für mich durch Umbruch auf mehrer Zeilen, Emacs rückt auch solche Konstrukte entsprechend ein

Code (perl): (dl )
1
2
3
print join ", ",
           grep {/^prefix_/}
                 keys %mnemotisch;


aber das ist dann schon Geschmacksfrage... (Ronnie hat das auch mal als Pythonesque bezeichnet. ; )
<< >> 6 Einträge, 1 Seite



View all threads created 2009-01-10 15:50.