2015-02-03 2 views
0

У меня очень много строк в 200 файлах txt, которые я пытаюсь фильтровать и сохранять только уникальные. Я думал использовать NSSet для этого, но проблема в том, что в начальных файлах есть 300 миллионов строк, и я не могу загрузить их все в NSSet, потому что его инициализация очень долгое время.Отфильтруйте миллионы строк и сохраняйте только уникальные Objective-C

Может ли кто-нибудь предложить лучший подход или работу вокруг, которая могла бы помочь мне решить эту проблему?

+0

Вы вынуждены использовать текстовые файлы для исходных данных? – Niko

+0

Ну, у меня есть все строки в txt-файлах, поэтому я думаю, да. – GuessGen

+0

Но, вероятно, я могу перенести их в БД или что-то в этом роде. Но снова это, вероятно, займет время. – GuessGen

ответ

1

Вот решение, которое является низкой стоимостью для памяти и процессора потребления:

Вы можете использовать SQLite базы данных: создать таблицу, в одной колонке строки в качестве уникального ключа, который будет принимать каждую строку вы разбор.

Во время ввода каждой строки, если строка уже находится в таблице, она не будет вставлена, и в конце таблица будет содержать только уникальные строки.

сделать свой код для того, чтобы сохранить вставки строк на провал вставки из уже существующей строки (дубликат ключа)

Edit: добавить также индекс по этому колонку, потому что ваши потребностям относятся много записей

+0

На самом деле это звучит очень хорошо. Я определенно попробую. Но не будет ли это занимать много времени, если можно сказать, что я добавляю новую строку в БД, где уже есть 100 млн уникальных строк. Но это все равно может быть хорошим решением, так как я смогу использовать компьютер во время работы программы. – GuessGen

+0

Вы также можете добавить индекс в этот столбец для более быстрого лечения новой вставки, когда уже имеется много записей. С этим большим количеством строк для обработки файлов текстов, это всегда займет некоторое время (это не лучшие условия, которые имеют дело со множеством строк) – Niko

0

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

+0

Спасибо, но я думаю, что это не так. Используя NSSet, я предполагаю, что он также записывает уникальные в памяти, а затем добавляет другие строки, если их нет. Я пытался это сделать, но программа работает очень долго, так как я думаю, что у меня есть что-то вроде 150 миллионов уникальных строк. – GuessGen

 Смежные вопросы

  • Нет связанных вопросов^_^