gpt4 book ai didi

arrays - 使用 map 在数组中创建出现的哈希值

转载 作者:行者123 更新时间:2023-12-03 23:59:05 25 4
gpt4 key购买 nike

我似乎记得有一种“聪明”的方法可以使用 Perl 和 map 从数组创建散列,这样键是数组的元素,值是数字元素出现的次数。像这样的东西,虽然这不起作用:

$ perl -e '@a = ('a','a','b','c'); %h = map { $_ => $_ + 1  } @a ; foreach $k (keys (%h)) { print "$k -> $h{$k}\n"}'
c -> 1
b -> 1
a -> 2
$

我在想象吗?我该怎么做?

最佳答案

你可以写 map {$h{$_}++} @a 忽略它的返回值,但你为什么要这样做呢? for (@a){$h{$_}++} 很容易输入。

那你为什么这样做呢?

map 用于转换列表。它接受一个输入列表并生成一个输出列表。如果您使用副作用而不是输出以不同的方式使用它,它可能会使读者感到困惑。

此外,虽然 map 被优化为在 void 上下文中调用时不创建输出列表,但速度较慢:

use warnings;
use strict;
use Benchmark qw/cmpthese/;
my @in = map {chr(int(rand(127)+1))} 1..10000;

my %out;
cmpthese(10000,
{stmtfor => sub{%out = (); $out{$_}++ for @in},
voidmap => sub{%out = (); map {$out{$_}++} @in;},
}
);

__END__

Rate voidmap stmtfor
voidmap 2075/s -- -17%
stmtfor 2513/s 21% --

关于arrays - 使用 map 在数组中创建出现的哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64993281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com