Фильтровать дубликаты объяснения - PullRequest
1 голос
/ 28 мая 2020

Я perl новичок. Я пытаюсь отфильтровать повторяющиеся записи. Я нашел в Интернете кое-что, что волшебным образом работает для меня, но я этого не совсем понимаю. Может ли кто-нибудь подробно объяснить мне это?

my %seen;
grep !$seen{$_}++, @_; 

Ответы [ 2 ]

2 голосов
/ 28 мая 2020

Возможно, вам будет полезно узнать об этом подробнее.

# Hash to keep track of what you've seen
my %seen;
# Array to store the first occurrence of each value
@values;

foreach my $x (@_) {
  # If we haven't seen this value already
  if (!$seen{$x}) {
    # Push this value onto @values
    push @values, $x;
  }

  # Increment the value in %seen to say we've seen this value
  $seen{$x}++;
}

# At the end, the unique values are in @values
1 голос
/ 28 мая 2020

%seen - переменная ha sh. @_ - это массив, содержащий все ваши входные параметры.

Когда l oop впервые видит элемент, этот элемент не имеет ключа в% видимых. В следующий раз, когда l oop увидит тот же элемент, его ключ существует в ha sh и значение для этого ключа истинно, тогда он пропускает элемент и go к следующему элементу.

you можно найти более подробную информацию: В чем разница между $, @,% в Perl объявлении переменной? и здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...