Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.06.2009, 15:29
iFynk iFynk вне форума
Прохожий
 
Регистрация: 10.06.2009
Сообщения: 36
Репутация: 10
По умолчанию Массивы

Как проверить наличие строки в одномерном строковом массиве?
Может есть аналог php функции in_array
Ответить с цитированием
  #2  
Старый 19.06.2009, 15:41
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

Объявите свой массив не как массив строк, а как объект TStrings или TStringList и пользуйтесь методами типа indexOf.
Ответить с цитированием
  #3  
Старый 19.06.2009, 15:52
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

В массиве- только перебор. Через type можно
Ответить с цитированием
  #4  
Старый 19.06.2009, 16:02
iFynk iFynk вне форума
Прохожий
 
Регистрация: 10.06.2009
Сообщения: 36
Репутация: 10
По умолчанию

Цитата:
Сообщение от TOJluK
В массиве- только перебор. Через type можно
а как через type это делать? можно примерчик.
Ответить с цитированием
  #5  
Старый 19.06.2009, 16:17
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

Так что ли:

Код:
 type 
   TMass = array of string;

  ....

  function StrExists(S:string; M: TMass): integer;
  var
   i: integer;
  begin
   for i := 0 to High(M) do
    if M[i] = S then begin
      Result := i;
      exit;
    end;
   Result := -1;
  end;
Ответить с цитированием
  #6  
Старый 19.06.2009, 16:35
iFynk iFynk вне форума
Прохожий
 
Регистрация: 10.06.2009
Сообщения: 36
Репутация: 10
По умолчанию

хотелось бы без перебора
Ответить с цитированием
  #7  
Старый 19.06.2009, 16:53
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

А вы уверены, что in_array без перебора работает? Если да, значит знаете как это реализовано. Вам остается только накалякать тоже самое в Delphi )
Ответить с цитированием
  #8  
Старый 19.06.2009, 16:55
iFynk iFynk вне форума
Прохожий
 
Регистрация: 10.06.2009
Сообщения: 36
Репутация: 10
По умолчанию

Цитата:
Сообщение от ART
А вы уверены, что in_array без перебора работает? Если да, значит знаете как это реализовано. Вам остается только накалякать тоже самое в Delphi )

конечно не уверен. там полюбому есть цыкл. )
Ответить с цитированием
  #9  
Старый 19.06.2009, 16:57
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

А чем вам перебор не устраивает? Помоему по другому никак...
Ответить с цитированием
  #10  
Старый 19.06.2009, 21:48
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Ну принцип тот же, что указал ART
можно тока
Код:
 type 
   TMass = set of char;
ну и тогда

Код:
function StrExists(S:string; M: TMass):boolean; // функция вернет True если S содержится в M
 begin
 if S in M = True then 
  Result := True;
  else
   Result := False;
 end;
Ответить с цитированием
  #11  
Старый 21.06.2009, 13:04
Grunch Grunch вне форума
Новичок
 
Регистрация: 08.04.2008
Адрес: Краснодар
Сообщения: 52
Репутация: 10
По умолчанию

На самом деле можно обойтись без перебора, но тогда нужно будет помимо самих строк хранить их хэши. При условии хорошей хэш-функции проверка на наличие строки в массиве будет выполняться за константное время
Ответить с цитированием
  #12  
Старый 21.06.2009, 16:11
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Даже с наличием хэша перебор всех элементов хотя-бы раз произойдет - от сортировки вы не избавитесь.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:16.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter