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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.08.2009, 15:46   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Как быстро узнать исть ли данная строка в массиве из строк?

Собственно есть переменная
S:String;
и массив
Mas:Array[0..4] of String = ('String0','String1','String2','Str ing3',String4');
Можно ли без цикла (без перебора) узнать, существует ли элемент массива (не важен его номер, выясняется сам факт), равный S?
То есть по сти, мне необходимо узнать, можно ли это:
Код:
Function YesOrNot:Boolean;
Var
 J:Byte;
Begin
For J:=0 to 4 do
 If S = Mas[J] Then Result:=True
End;
Заменить на что нибудь более приличное (без цикла)?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 26.08.2009, 16:14   #2
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

Цитата:
Можно ли без цикла (без перебора) узнать, существует ли элемент массива
Ну смотри: для того, чтобы узнать равна ли некоторая строка S1 заданной S2, необходимо обратиться к ней (прочитать) и сравнить посимвольно c S2.
Твой вопрос эквивалентен такому: Как узнать значение строки (или переменной) не обращаясь к ней?
Ответ: никак.

В твоем случае необходимо перебрать все строки в цикле.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Daramant вне форума Ответить с цитированием
Старый 26.08.2009, 16:16   #3
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

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

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 26.08.2009, 16:23   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А чем цикл не устроил?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.08.2009, 16:45   #5
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Да в принципе всем, только довольно таки медленно. Я просто подумал, а нельзя ли тут как-нибудь in прикрутить?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 26.08.2009, 17:00   #6
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

Цитата:
а нельзя ли тут как-нибудь in прикрутить
Если бы и был in для строк, думаешь, он бы работал как-то иначе, чем сравнивал заданную строке с теми, что предлагаются? - конечно нет.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Daramant вне форума Ответить с цитированием
Старый 26.08.2009, 17:03   #7
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
Да в принципе всем, только довольно таки медленно. Я просто подумал, а нельзя ли тут как-нибудь in прикрутить?
Нельзя создавать множества строк (set of string), а если и можно было бы, то сначала пришлось бы пройтись циклом, чтобы занести туда элементы массива.

Можно еще в стринглист загнать и через IndexOf проверить. Но везде нужны циклы )
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 26.08.2009, 17:03   #8
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
Печаль

Придется циклом.... А как не хотелось Или намалевать собственную функцию, чтоб меньше писанины было...
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 27.08.2009, 03:16   #9
megachuhancer
Форумчанин
 
Регистрация: 16.04.2009
Сообщений: 247
По умолчанию

Но ведь можно использовать дерево. Что-то вроде
Код:
type
   PNode = ^TNode;
   TNode = record
      ch : char;
      count : integer;
      p : array [char] of PNode;
   end;
Например, есть строки:
ababaca
acccfg
aenfg
bbbb
Тогда у нас есть структуры с 'a' и c 'b'. Структура с 'a' ссылается на структуры с 'b', 'c' и 'e'. Структура с 'b' ссылается на структуру с 'b'. Ну и так далее. Для каждого вида строк храним количество экземпляров.

С массивом как таковым конечно не получится, но в принципе-то возможно. Можно создать класс, имитирующий массив и делающий то, что я описал.

Это обеспечивает более быстрый поиск.

Последний раз редактировалось megachuhancer; 27.08.2009 в 04:44.
megachuhancer вне форума Ответить с цитированием
Старый 27.08.2009, 08:53   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
только довольно таки медленно
Впервые слышу чтоб самый быстрый способ был медленный.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать состоит ли строка из одных числовых символов DarkEvil Общие вопросы Delphi 12 13.08.2009 08:44
проверить, содержится ли строка в массиве aurora_87 Общие вопросы C/C++ 6 28.12.2008 01:25
Как узнать существует ли в БД нужная строка? kiber0net0 БД в Delphi 1 02.09.2008 21:31
Масив строк => строка Rio309 Помощь студентам 4 22.03.2008 15:35
как в memo выводит полный путь к файлу? Файлом является данная программа. Alar Компоненты Delphi 0 29.10.2006 23:24