Как распечатать уникальные элементы в массиве Perl?

Эта ошибка возникает при попытке кодировать строку, отличную от юникода: она пытается ее декодировать, предполагая, что она находится в простой ASCII. Есть две возможности:

  1. Вы кодируете его в байтовую строку, но поскольку вы использовали codecs.open, метод write ожидает объект unicode. Поэтому вы кодируете его, и он пытается его снова декодировать. Попробуйте: f.write(all_html).
  2. all_html не является, по сути, объектом unicode. Когда вы делаете .encode(...), он сначала пытается его декодировать.
25
задан brian d foy 13 January 2009 в 18:43
поделиться

3 ответа

use List::MoreUtils qw/ uniq /;
my @unique = uniq @faculty;
foreach ( @unique ) {
    print $_, "\n";
}
42
ответ дан innaM 13 January 2009 в 18:43
поделиться
  • 1
    Так, 32-разрядный хеш может только однозначно определить Строку с 2 символами? – ADTC 8 December 2017 в 22:04

Я предлагаю продвинуть его в хеш. как это:

my %faculty_hash = ();
foreach my $facs (@faculty) {
  $faculty_hash{$facs} = 1;
}
my @faculty_unique = keys(%faculty_hash);
14
ответ дан user54650 13 January 2009 в 18:43
поделиться
  • 1
    Эй Alex, спасибо за ответ. Но если я делаю: u' Р “Р» авное' в ucontent это возвращает False. Существует ли лучший способ сделать поиск? – Vitaly Babiy 20 June 2009 в 04:28

Ваш лучший выбор состоял бы в том, чтобы использовать (в основном) встроенный инструмент, как uniq (как описано innaM).

Если у Вас нет способности использовать uniq и хотеть сохранить порядок, можно использовать grep для моделирования этого.

my %seen;
my @unique = grep { ! $seen{$_}++ } @faculty;
# printing, etc.

Это сначала дает Вам хеш, где каждый ключ является каждой записью. Затем Вы выполняете итерации по каждому элементу, рассчитывая, сколько из них существует, и добавление первого. (Обновленный с комментариями brian d foy)

33
ответ дан Community 13 January 2009 в 18:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: