Автор Тема: Уникальный список со строками.  (Прочитано 4168 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Steve

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://cadr.da.ru
Уникальный список со строками.
« : 15 Ноября 2001, 13:03:54 »
Вот в Delphi есть TStringList, которым можно создать список строк с уникальными значениями, а как сделать это на Perl, можно маленький примерчик. Заранее спасибо.

Оффлайн Wowik

  • The Warlock
  • Пользователь
  • **
  • Сообщений: 88
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Уникальный список со строками.
« Ответ #1 : 16 Ноября 2001, 06:34:34 »
Что есть уникальные значения? Значения строк? или ключей? Яснее пжалста...
Задачу опиши...
А ларчик просто открывался ...

Оффлайн Steve

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://cadr.da.ru
Уникальный список со строками.
« Ответ #2 : 16 Ноября 2001, 08:17:45 »
Цитировать
Что есть уникальные значения? Значения строк? или ключей? Яснее пжалста...
Задачу опиши...


Вообщем необходимо создать список строк или массив.
При добавлении в него нового значения небходимо проверить есть ли там оно. Если есть, то не добавлять.
На дельфе я строил список, сортировал каждый раз после добавления, и если в отсортированном списке было значение, то оно не добавлялось.
Теперь, наверно, понятно.

Оффлайн lodevar

  • Сеньор-Помидор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 757
  • +0/-0
  • 2
    • Просмотр профиля
    • http://lodevar.hut.ru
Самое банальное решение:
« Ответ #3 : 16 Ноября 2001, 09:35:53 »

$string="Looking for this";
$found=0;
foreach(@array)
{
  if($_ eq $string) { $found=1; }
}
if(!$found)
{
  push(@array,$string);
}
С наилучшими пожеланиями. LODEVAR

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
вот
« Ответ #4 : 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);}
« Последнее редактирование: 16 Ноября 2001, 11:53:23 от Green Kakadu »
 в исканиях.

Оффлайн lodevar

  • Сеньор-Помидор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 757
  • +0/-0
  • 2
    • Просмотр профиля
    • http://lodevar.hut.ru
Уникальный список со строками.
« Ответ #5 : 16 Ноября 2001, 11:50:38 »
А еще вот как:

%seen=();
@unique=grep{!$seen{$_}++}@list;
С наилучшими пожеланиями. LODEVAR

Оффлайн Steve

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://cadr.da.ru
Уникальный список со строками.
« Ответ #6 : 16 Ноября 2001, 12:21:56 »
Всем спасибо за советы! Проблема решена.

  • Гость
Уникальный список со строками.
« Ответ #7 : 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";
}

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

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28