|
#1
|
|||
|
|||
Массивы
Как проверить наличие строки в одномерном строковом массиве?
Может есть аналог php функции in_array |
#2
|
|||
|
|||
Объявите свой массив не как массив строк, а как объект TStrings или TStringList и пользуйтесь методами типа indexOf.
|
#3
|
||||
|
||||
В массиве- только перебор. Через type можно
|
#4
|
|||
|
|||
Цитата:
|
#5
|
|||
|
|||
Так что ли:
Код:
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
|
|||
|
|||
хотелось бы без перебора
|
#7
|
|||
|
|||
А вы уверены, что in_array без перебора работает? Если да, значит знаете как это реализовано. Вам остается только накалякать тоже самое в Delphi )
|
#8
|
|||
|
|||
Цитата:
конечно не уверен. там полюбому есть цыкл. ) |
#9
|
|||
|
|||
А чем вам перебор не устраивает? Помоему по другому никак...
|
#10
|
||||
|
||||
Ну принцип тот же, что указал 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
|
|||
|
|||
На самом деле можно обойтись без перебора, но тогда нужно будет помимо самих строк хранить их хэши. При условии хорошей хэш-функции проверка на наличие строки в массиве будет выполняться за константное время
|
#12
|
||||
|
||||
Даже с наличием хэша перебор всех элементов хотя-бы раз произойдет - от сортировки вы не избавитесь.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |