Schrift
[thread]12669[/thread]

Teil-Hash mit Grep auf Keys?

Leser: 1


<< >> 5 Einträge, 1 Seite
LanX-
 2008-10-23 04:59
#115713 #115713
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
Hi

vielleicht denke ich zu kompliziert, gibts ne elegantere Methode um ein Hash zu filtern?
gerne auch per use "Coremodul" ... konnte aber nix finden...

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/perl

use Data::Dumper;

%hash=(
    a=>1,
    b=>2,
    c=>3,
    aa=>4,
);

@filterd_keys=grep {/a/} keys %hash;

@filterd_hash{@filterd_keys}= @hash{ @filterd_keys };

print Dumper \%filterd_hash;


Code: (dl )
1
2
3
4
$VAR1 = {
'a' => 1,
'aa' => 4
};
pq
 2008-10-23 15:10
#115719 #115719
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
wenns derselbe hash sein darf:
Code (perl): (dl )
delete @hash{ grep !m/a/, keys %hash };


wenn nicht:
Code (perl): (dl )
my %hash2 = map { m/a/ ? ($_, $hash{$_}) : () } keys %hash;
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
LanX-
 2008-10-23 17:11
#115725 #115725
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
Danke, mein Favorit ist jetzt ...

Code (perl): (dl )
1
2
3
%hash2= map { ($_,$hash{$_}) }
          grep {/a/}
            keys %hash ;
Ronnie
 2008-10-23 18:08
#115727 #115727
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Hallo Rolf,

sieht ein wenig pythonesque aus! Wobei das wieder ein Punkt ist, wo ListComprehensions in Perl schön wären:
Code: (dl )
1
2
Hash = { 'a': 1, 'b': 2, 'c': 3, 'aa': 4 }
Hash = dict([(k, v) for k, v in Hash.items() if re.compile(r'a').search(k)])


Gruß,
Ronnie

EDIT: Beispiel an Problemstellung angepasst
LanX-
 2008-10-23 18:58
#115729 #115729
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
Hei Ronnie,

erzähl mir auf der nächtsen PM mehr über ListComprehensions und ich denk drüber nach wie man es in ein Modul gießen könnte. 8 )
<< >> 5 Einträge, 1 Seite



View all threads created 2008-10-23 04:59.