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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2011, 17:56   #1
Alex2391
Пользователь
 
Аватар для Alex2391
 
Регистрация: 31.01.2011
Сообщений: 54
По умолчанию Поиск в TStringList'e

Имеются 4 списка: a,b,a1,b1.
Как узнать содержатся ли элементы списка a1 в списке а и элементы списка b1 в списке b одновременно, и сколько раз?
Alex2391 вне форума Ответить с цитированием
Старый 13.03.2011, 18:33   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) задача достаточно неопределена.
допустим список A1 состоит из 'AA', 'AB', 'AA', 'AC', 'ab'
список A cостоит из элементов 'BA', 'AA', 'AB', 'AB', 'ab'
Цитата:
и сколько раз?
2) в любом случае решается это примерно так:
Код:
for i:=0 to a1.Count-1 do
  if a.IndexOf(a1.Strings[i])>=0 then {Нашли совпадение}
если списки большие и задача это допускает, то лучше отсортировать элементы в списках, где идёт поиск и использовать метод .Find:
Код:
a.sort;
for i:=0 to a1.Count-1 do
  if a.Find(a1.Strings[i], j) then {Нашли совпадение}
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.03.2011, 19:44   #3
Alex2391
Пользователь
 
Аватар для Alex2391
 
Регистрация: 31.01.2011
Сообщений: 54
По умолчанию

Поясняю.
Например, список а состоит из 'кг', 'кг', 'м'
список а1 из 'кг', 'м'
список b из 'А', 'с', 'с'
список b1 из 'с', 'с'.
Нужно узнать есть ли в списке а элементы списка а1, и в списке b элементы списка b1.
Если оба условия одновременно выполняются, то выполнить действие какое-нибудь.
В основном проблема с определением выполняются ли оба условия одновременно.
Alex2391 вне форума Ответить с цитированием
Старый 13.03.2011, 20:10   #4
Alex2391
Пользователь
 
Аватар для Alex2391
 
Регистрация: 31.01.2011
Сообщений: 54
По умолчанию

Люди плиз, помогите, очень надо!
Alex2391 вне форума Ответить с цитированием
Старый 14.03.2011, 12:52   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я же выше привёл готовый код?
в чём проблема?
если нужно и там и там найти,то:
Код:
  isFound_in_A:= false; 
  for i:=0 to a1.Count-1 do
     if a.IndexOf(a1.Strings[i])>=0 then {Нашли совпадение}
     begin
        isFound_in_A := true;
        break;
     end;

  isFound_in_B:= false; 
  for i:=0 to b1.Count-1 do
     if b.IndexOf(b1.Strings[i])>=0 then {Нашли совпадение}
     begin
        isFound_in_B := true;
        break;
     end;

if  isFound_in_A and isFound_in_B then 
  {оба условия одновременно выполняются}
  ....
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.03.2011, 18:37   #6
Alex2391
Пользователь
 
Аватар для Alex2391
 
Регистрация: 31.01.2011
Сообщений: 54
По умолчанию

Цитата:
в чём проблема?
Проблема в том, что в списке А1 может быть несколько одинаковых элементов, например 'с', а в списке А может находиться только один такой элемент.
Данный код будет выдавать true в любом случае, т.к. элемент 'с' имеется в списке А и его не волнует сколько этих же элементов в списке А1.
Нужно чтоб, было true если в списке А имеются все элементы списка А1.
Alex2391 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск по БД TaYgA БД в Delphi 4 19.09.2010 17:30
Поиск по БД jaxik БД в Delphi 8 08.09.2010 03:41
Поиск Яр|/||< (^_^) Общие вопросы Delphi 9 24.06.2009 09:37
Поиск Volkogriz Общие вопросы Delphi 5 22.04.2008 10:59
поиск Lonix Общие вопросы Delphi 2 04.04.2007 01:59