Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.06.2011, 11:09   #1
Glob
Пользователь
 
Регистрация: 11.11.2010
Сообщений: 25
По умолчанию Сравнить 2 массива

Есть два ListBox'a в одном 609100 элементов, а в другом может быть разное
Нужно сравнить 2 ListBox'a и если во втором есть строка, которой нет в первом, то записать ее в файл. Реализовал вот так:

Код:
for i := 0 to iend do
    begin
      ListBox1.ItemIndex:=0;
      pass2:=ListBox2.Items.strings[i];
      g:=0;
         for k:=0 to 609099 do
          begin
             pass1:=ListBox1.Items.strings[k];
             if pass1=pass2 then
              begin
              g:=1;
              Break;
              end;

           end;
       if g=0 then
           begin
            
            Append(good);
            writeln(good,  pass2);
             CloseFile(good);
            end;

      ListBox2.ItemIndex:=i;
    end;
работает нормально, но очень медленно. Я понимаю что первый массив не из маленьких, но ЦП у меня совсем не загружен во время работы. Как можно ускорить ?
Glob вне форума Ответить с цитированием
Старый 27.06.2011, 13:23   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
 for i := 0 to ListBox2.Items.Count-1 do begin
   if ListBox1.Items.IndexOf(ListBox2.Items[i])<>0 then 
      Запишем ListBox2.Items[i] в файл
 end;
Пойдет такое упрощение?
или же:
Код:
var s:string;
...
s:=ListBox1.Items.Text;
 for i := 0 to ListBox2.Items.Count-1 do begin
   if pos(ListBox2.Items[i],s)<>0 then 
      Запишем ListBox2.Items[i] в файл
 end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.06.2011, 14:00   #3
Glob
Пользователь
 
Регистрация: 11.11.2010
Сообщений: 25
По умолчанию

Спасибо первый вариант прошел, но скорость работы увеличилась не сильно
Glob вне форума Ответить с цитированием
Старый 27.06.2011, 14:17   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но скорость работы увеличилась не сильно
Набор данных в ЛистБоксе постоянный?
Если да, и поиск в нем нужен частый - составь таблицу индексов (отсортировав данные), и после бинарным поиском ищи - скорость возрастет во много раз.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнить delfin07 Помощь студентам 0 03.06.2011 01:56
С++|Сравнить элементы массива Демик Помощь студентам 6 24.05.2011 16:21
сравнить значение из массива и выбрать значение konrad Microsoft Office Excel 4 15.03.2011 20:40
Написать сортировки массива- прямое включение и шелла, и сравнить какая из них работает быстрее Noiziya Помощь студентам 3 30.12.2010 01:00
сравнить 2 массива... pobedin Паскаль, Turbo Pascal, PascalABC.NET 8 19.08.2010 09:03