Удалить дубликаты ID? - PullRequest
       31

Удалить дубликаты ID?

2 голосов
/ 15 октября 2010

У меня есть список из 50 000 идентификаторов в плоском файле, и мне необходимо удалить все дубликаты идентификаторов. Есть ли эффективный / рекомендуемый алгоритм для моей проблемы?

Спасибо.

Ответы [ 8 ]

5 голосов
/ 15 октября 2010

Вы можете использовать программу командной строки sort для упорядочения и фильтрации списка идентификаторов. Это очень эффективная программа, которая хорошо масштабируется.

sort -u ids.txt > filteredIds.txt
3 голосов
/ 15 октября 2010

Читайте в словарь построчно, отбрасывая дубликаты. Когда все прочитаете, запишите в новый файл.

2 голосов
/ 15 октября 2010

Один раз я провел несколько экспериментов, и самым быстрым решением, которое я смог получить в PHP, было сортировка элементов и удаление всех дублирующих элементов вручную.

Если производительность не так уж важна для вас(что я подозреваю, 50000 это не так много), чем вы можете использовать array_unique(): http://php.net/array_unique

0 голосов
/ 15 октября 2010

Если вы можете просто взорвать содержимое файла через запятую (или любой разделитель), то array_unique выдаст наименьший (и самый чистый) код, в противном случае, если вы анализируете файл, используя $ array [$ id]= $ id - самое быстрое и чистое решение.

0 голосов
/ 15 октября 2010

Вы можете сделать это через array / array_unique, в этом примере, я думаю, ваши идентификаторы разделены символами строки, если это не так, просто измените их

$file = file_get_contents('/path/to/file.txt');
$array = explode("\n",$file);
$array = array_unique($array);
$file = implode("\n",$array);
file_put_contents('/path/to/file.txt',$file);
0 голосов
/ 15 октября 2010

Если вы можете использовать терминал (или собственное выполнение Unix), самый простой способ: (при условии, что в файле больше ничего нет):

sort < ids.txt | uniq > filteredIds.txt

0 голосов
/ 15 октября 2010

Вы можете сделать:

file_put_contents($file,implode("\n",array_unique(file($file)));

Как это работает?

  • Прочитать файл, используя функцию file, которая возвращает массив.
  • Избавитьсяиз дублирующих строк, используя array_unique
  • , взорвать эти уникальные строки с помощью "\ n", чтобы получить строку
  • записать строку обратно в файл, используя file_put_contents

Это решение предполагает, что у вас есть один идентификатор на строку в плоском файле.

0 голосов
/ 15 октября 2010

Полагаю, если у вас достаточно большого объема памяти, вы можете поместить все эти идентификаторы в массив

$array[$id] = $id;

, это автоматически отменит дубликаты.

...