The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Удаление повторов в массивах"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Удаление повторов в массивах"
Сообщение от Evgeny_ emailИскать по авторуВ закладки on 14-Июл-04, 11:33  (MSK)
Следующая ситуация:
Строка разбита на несколько массивов, напр. строка с описанием книги, разбита на массив номеров, названий и описаний.
Нужно удалить повторяющиеся !!строки!!, а не эл-ты каждого массива, т.к. в массиве названия, могут быть одинаковые названия, но описания разные
join'ить в строки назад нельзя, и при парсинге исключать повторы тоже нельзя...

Спасибо.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Удаление повторов в массивах"
Сообщение от mirya emailИскать по авторуВ закладки on 14-Июл-04, 15:11  (MSK)
т.е. как я понял если @a, @b, @c - массивы номеров названий и описаний, то первой "строкой" будет $a[0].$b[0].$c[0] (`.` - конкатенация)? Если так, то эффективнее всего паралельно сортировать 3 массива quicksort по ключю $a[0].$b[0].$c[0] с собственной ф-цией сравнения, к-рая ничего "физически" не слеивает, а просто сканирует строки и перепрыгивает на следующий массив когда нужно. В самом quicksort'е нужно влепить проверку на равенство с удалением лишнего
  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Удаление повторов в массивах"
Сообщение от Evgeny_ Искать по авторуВ закладки on 14-Июл-04, 23:45  (MSK)
Ты правельно понял мой вопрос.
Спасибо!
Но не мог бы ты по подробнее рассказать про быструю сортировку...
Заранее благодарен!
  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Удаление повторов в массивах"
Сообщение от Evgeny_ Искать по авторуВ закладки on 14-Июл-04, 23:59  (MSK)
Насколько я понял, в perl sort() реализован quicksort, и речь идет о больших массивах, а там quicksort уже не такой и быстрый.
И объясни plz как можно отсортировать массивы по ключу $a[0].$b[0].$c[0]?
Спасибо.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Удаление повторов в массивах"
Сообщение от ACCA Искать по авторуВ закладки(??) on 15-Июл-04, 00:32  (MSK)
@part1,@part2,@part3;

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Удаление повторов в массивах"
Сообщение от ACCA Искать по авторуВ закладки(??) on 15-Июл-04, 00:52  (MSK)
@a, @b, @c; # Это твои фрагменты

Если повторов мало, то:

my %idx;

for (my $i=0; $i< scalar @a, $i++) {
    if ($idx{$a[$i]}{$b[$i]}{$c[$i]}) {
         splice(@a, $i, 1);
         splice(@b, $i, 1);
         splice(@c, $i, 1);
         redo;
    }
    $idx{$a[$i]}{$b[$i]}{$c[$i]} = 1;
}

если повторов много, то:

for (my $i=0; $i< scalar @a, $i++) {
    $idx{$a[$i]}{$b[$i]}{$c[$i]} = 1;
}

@a = @b = @c = ();

foreach $ka (keys %idx) {
    foreach $kb (keys %{ $idx{$ka} }) {
        foreach $kc (keys %{ $idx{$ka}{$kb} }) {
            push @a, $ka;
            push @b, $kb;
            push @c, $kc;
        }
    }
}

А если ты будешь _хранить_ всё в хэше, а не в трёх массивах, то повторы при парсинге у тебя не появятся и чесать левое яйцо правой ногой не придётся.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Удаление повторов в массивах"
Сообщение от Evgeny_ Искать по авторуВ закладки on 15-Июл-04, 01:34  (MSK)
Спасибо!!!
Я просто не знал что в перле есть n-мерные хэши.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "Удаление повторов в массивах"
Сообщение от ACCA Искать по авторуВ закладки(??) on 15-Июл-04, 23:08  (MSK)
man perldsc
man perlref

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру