Bir karma verilen perl işlevi map
: kullanarak aşağıdaki eylemi yapmak için bir yol arıyorum, çiftleri (anahtar, değeri) değerin belirtilen bir parametreye eşit veya eşleştiği değer.eşleme hash değeri (anahtar, değer) eşleşen değer kümesi ayıklamak için kullanın
Örneğimde, value = failed
'un (anahtar, değer) çiftlerini ayıklamak istiyorum, ancak aynı zamanda bir ifade de olabilir (örn. A ile başlayan bir dize veya bir REGEX). Bu yüzden bir sonuç olarak bir karma ve sadece değerlerle eşleşen anahtarların bir tablosunu istiyorum.
my %strings = (
bla => "success",
ble => "failed",
bli => "failed",
foo => "success",
blo => "failed",
bar => "failed",
blu => "success"
);
my %failed_s =();
while (my ($k, $v) = each %strings) {
if ($v eq 'failed') {$failed_s{$k} = $v};
};
Bunu yapmanın birçok yolu denediklerini ama büyük sonuçlar yüzden ben vb
my %failed_s =
map { { $_ => $strings{$_} }
if ($strings{$_}./failed/) }
keys %strings;
my %failed_s =
map { ($strings{$_} eq 'failed') &&
($_, $strings{$_}) }
keys %strings;
print "Dumper \%failed_s: \n" . Dumper(\%failed_s);
referanslar, özenti, sonuçları hakkında karıştı alıyorum düşünüyorum olmadan bu mümkün olmadığı ya da olabilir Bu durumda haritayı kullanmak etkili, fakat bana (ve muhtemelen başkalarının) nedenini bilmesine yardımcı olur.
perl’in 'grep' – knittl
@ knittl kullanmasını isterdim, ben de denedim ama nasıl çalıştığını gösteremedim eather, bununla ilgili bir örnek ya da fikrin varsa bunu görmekten memnun olurum! – Thomas
@ @ mob's [answer] (http://stackoverflow.com/questions/5597542/using-map-to-extract-hash-set-of-key-value-matching-specified-value/5597656#5597656) 'ye bakın. –