我一直在尋找一種方法來使用perl函數map
: 給出一個哈希,我想提取對(鍵,值),其中值等於或匹配指定的參數。使用地圖來提取(密鑰,值)匹配指定值的哈希集
在我的示例中,我想提取(鍵,值)對,其中value = failed
,但它也可以是表達式(即以A或REGEX開頭的字符串)。這就是爲什麼我想要一個散列,而不僅僅是一個匹配值的鍵。
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};
};
我試着這樣做的幾種方法,但沒有很大的成績,所以我覺得我越來越感到困惑的引用,做作,結果等
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);
這可能是不可能或不在這種情況下有效地使用地圖,但它會幫助我(也可能是其他人)知道爲什麼。
我會使用perl的'grep' – knittl 2011-04-08 15:48:01
@knittl我也試過,但不知道如何使它工作eather,如果你有一個例子或想法,我會很高興看到它! – Thomas 2011-04-08 16:15:47
查看@ mob的[answer](http://stackoverflow.com/questions/5597542/using-map-to-extract-hash-set-of-key-value-matching-specified-value/5597656#5597656)。 – 2011-04-08 16:27:12