Perl,如何将所有哈希值小写?

发布于 2024-11-28 19:12:43 字数 83 浏览 1 评论 0原文

我需要将(一级)哈希复制到新哈希,所有值均小写。

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

I need to copy a (one-level) hash to a new one, with all values lowercased.

Do you know a smart method (just to avoid an ugly foreach... ;-)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

鹤舞 2024-12-05 19:12:43
my %new = map { $_ => lc $old{$_} } keys %old;
my %new = map { $_ => lc $old{$_} } keys %old;
私藏温柔 2024-12-05 19:12:43

这是使用 map 的单行:

my %newHash = map { $_ => lc $existingHash{$_} } keys %existingHash;

This is a one liner using map:

my %newHash = map { $_ => lc $existingHash{$_} } keys %existingHash;
浅忆 2024-12-05 19:12:43

只是为了好玩,用不同的角度来看待同一件事:

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

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

Just for fun, a different angle to look at the same thing:

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

And yes, the keys and values functions are guaranteed to produce their lists in corresponding order, provided you don't modify the hash they're working on between calling one and the other.

过潦 2024-12-05 19:12:43

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

my %new = %old;
$_ = lc for values %new;

Just another way (that's not as cool now that I know you want a copy of the hash).

my %new = %old;
$_ = lc for values %new;
街道布景 2024-12-05 19:12:43

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

$new{$key} = lc $val while ($key,$val) = each %old;

In the spirit of fun, here's a solution using the somewhat obscure each function. (Don't believe I have ever used it before.)

$new{$key} = lc $val while ($key,$val) = each %old;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文