5

我需要将一个(一级)散列复制到一个新的散列,所有值都小写。

你知道一个聪明的方法(只是为了避免丑陋的foreach ... ;-)

4

5 回答 5

13
my %new = map { $_ => lc $old{$_} } keys %old;
于 2011-08-10T16:21:25.613 回答
6

这是一个使用map

my %newHash = map { $_ => lc $existingHash{$_} } keys %existingHash;
于 2011-08-10T16:21:39.423 回答
6

只是为了好玩,换个角度看同一件事:

my %new_hash;
@new_hash{keys %old_hash} = map lc, values %old_hash;

是的,keysandvalues函数保证以相应的顺序生成它们的列表,前提是您在调用一个和另一个之间不修改它们正在处理的哈希。

于 2011-08-10T16:35:55.003 回答
3

只是另一种方式(现在我知道你想要哈希的副本,这并不酷)。

my %new = %old;
$_ = lc for values %new;
于 2011-08-10T18:34:59.673 回答
2

本着有趣的精神,这里有一个使用有点晦涩的each功能的解决方案。(不要相信我以前用过它。)

$new{$key} = lc $val while ($key,$val) = each %old;
于 2011-08-10T18:05:41.883 回答