Forum Webscript.Ru

Программирование => Perl => Тема начата: Steve от 15 Ноября 2001, 13:03:54

Название: Уникальный список со строками.
Отправлено: Steve от 15 Ноября 2001, 13:03:54
Вот в Delphi есть TStringList, которым можно создать список строк с уникальными значениями, а как сделать это на Perl, можно маленький примерчик. Заранее спасибо.
Название: Уникальный список со строками.
Отправлено: Wowik от 16 Ноября 2001, 06:34:34
Что есть уникальные значения? Значения строк? или ключей? Яснее пжалста...
Задачу опиши...
Название: Уникальный список со строками.
Отправлено: Steve от 16 Ноября 2001, 08:17:45
Цитировать
Что есть уникальные значения? Значения строк? или ключей? Яснее пжалста...
Задачу опиши...


Вообщем необходимо создать список строк или массив.
При добавлении в него нового значения небходимо проверить есть ли там оно. Если есть, то не добавлять.
На дельфе я строил список, сортировал каждый раз после добавления, и если в отсортированном списке было значение, то оно не добавлялось.
Теперь, наверно, понятно.
Название: Самое банальное решение:
Отправлено: lodevar от 16 Ноября 2001, 09:35:53

$string="Looking for this";
$found=0;
foreach(@array)
{
  if($_ eq $string) { $found=1; }
}
if(!$found)
{
  push(@array,$string);
}
Название: вот
Отправлено: Green Kakadu от 16 Ноября 2001, 11:47:29
sub check_uniq {
#----------------------------------------
my @list=@_;
my %uniq=();
   foreach my $elm(@list){
      if ($uniq{$elm}){return 0;}
      $uniq{$elm}++;
}   
return 1;
}

Проверим:

if (&check_uniq(@array, $check_me)){push(@array, $check_me);}
Название: Уникальный список со строками.
Отправлено: lodevar от 16 Ноября 2001, 11:50:38
А еще вот как:

%seen=();
@unique=grep{!$seen{$_}++}@list;
Название: Уникальный список со строками.
Отправлено: Steve от 16 Ноября 2001, 12:21:56
Всем спасибо за советы! Проблема решена.
Название: Уникальный список со строками.
Отправлено: от 27 Ноября 2001, 20:05:30
Казахский вариант :D

$mail="f:/mail.txt";
open (OUT, "<$mail");
$sort="f:/sort.txt";
open (IN, ">$sort");


@ma=;
for $mi (@ma){
$hahs{$mi}=$mi;# Вот это то что работает
}

for $key ( keys %hahs){
print IN "$key";
}

Работа скрипта основана на том что ключ значение эдентичны
И если в в массиве поподётся ещё один идентчный "адрес" то ключ значение просто перезапишутся
потерев собой предедущюю идентичную пару