如何避免将重复值推送到Perl数组中

Sub*_*ash 11 arrays perl

我需要从包含多个重复值的输入中添加数组中的唯一元素.

如何避免将重复值推送到Perl数组中?

Dem*_*nis 17

push(@yourarray, $yourvalue) unless grep{$_ == $yourvalue} @yourarray;
Run Code Online (Sandbox Code Playgroud)

这将在推送之前检查数组中是否存在该值.如果该值不存在,则将被推送.

如果值不是数字,则应使用eq而不是==.

  • 随着数组的增大,此解决方案的效率变得非常低下-首选哈希方法。 (2认同)

mvp*_*mvp 14

你只需要像这样使用哈希:

my %hash;
$hash{$key} = $value;  # you can use 1 as $value
...
Run Code Online (Sandbox Code Playgroud)

这将自动覆盖重复的密钥.

当您需要打印时,只需使用:

foreach my $key (keys %hash) {
    # do something with $key
}
Run Code Online (Sandbox Code Playgroud)

如果您需要对键进行排序,请使用

foreach my $key (sort keys %hash) ...
Run Code Online (Sandbox Code Playgroud)

  • 哇,这一定是新的记录:答案接受了4年后:) (5认同)
  • 他必须确定这是有效的.,P (5认同)