Что Самый Быстрый Путь состоит в том, чтобы Проверить на Ключевое слово в Списке Ключевых слов в Delphi?

У меня есть маленький список ключевых слов. То, что я действительно хотел бы сделать, сродни:

case MyKeyword of
  'CHIL': (code for CHIL);
  'HUSB': (code for HUSB);
  'WIFE': (code for WIFE);
  'SEX': (code for SEX);
  else (code for everything else);
end;

К сожалению, Оператор выбора не может использоваться как этот для строк.

Я ЗАТЕМ ЕЩЕ мог использовать прямое ЕСЛИ ЕСЛИ конструкция, например:

if MyKeyword = 'CHIL' then (code for CHIL)
else if MyKeyword = 'HUSB' then (code for HUSB)
else if MyKeyword = 'WIFE' then (code for WIFE)
else if MyKeyword = 'SEX' then (code for SEX)
else (code for everything else);

но я услышал, что это относительно неэффективно.

Что я делал, вместо этого:

P := pos(' ' + MyKeyword + ' ', ' CHIL HUSB WIFE SEX ');
case P of
  1: (code for CHIL);
  6: (code for HUSB);
  11: (code for WIFE);
  17: (code for SEX);
  else (code for everything else);
end;

Это, конечно, не лучший стиль программирования, но он хорошо работает для меня и до сих пор не имел значения.

Таким образом, что лучший способ состоит в том, чтобы переписать это в Delphi так, чтобы это было оба просто, понятно, но также и быстро?

(Для ссылки я использую Delphi 2009 со строками Unicode.)


Продолжение:

Toby рекомендовал, чтобы я просто использовал, Если Затем Еще создают. Оглядываясь назад на мои примеры, которые использовали Оператор выбора, я вижу, как это - жизнеспособный ответ. К сожалению, мое включение СЛУЧАЯ непреднамеренно скрыло мой реальный вопрос.

Я на самом деле не забочусь, какое ключевое слово это. Это - просто премия, если конкретный метод может определить, что как метод POS может. То, в чем я нуждаюсь, должно знать, является ли ключевое слово в наборе ключевых слов.

Таким образом, действительно я хочу знать, существует ли что-нибудь лучше, чем:

if pos(' ' + MyKeyword + ' ', ' CHIL HUSB WIFE SEX ') > 0 then

Если Затем Еще эквивалентный не кажется лучше в этом случае том, чтобы быть:

if (MyKeyword = 'CHIL') or (MyKeyword = 'HUSB') or (MyKeyword = 'WIFE') 
      or (MyKeyword = 'SEX') then

В комментарии Barry к вопросу Kornel он упоминает Дженерик TDictionary. Я еще не взял на новых Универсальных наборах, и похоже, что я должен копаться в них. Мой вопрос здесь состоял бы в том, создаются ли они для эффективности и как был бы с помощью TDictionary выдержать сравнение во взглядах и в скорости к вышеупомянутым двум строкам?


В более позднем профилировании я нашел что конкатенация строк как в: (' '+ MyKeyword + ''), ОЧЕНЬ дороги мудрый временем и должен избежаться, когда это возможно. Почти любое другое решение лучше, чем выполнение этого.

7
задан lkessler 22 April 2010 в 15:38
поделиться