![]() |
|
|
#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
|
||||
|
||||
|
Даже с наличием хэша перебор всех элементов хотя-бы раз произойдет - от сортировки вы не избавитесь.
|