Без разделения тегов на более мелкие порции (например, по длине) или без знания точного выполнения параметров соответствия ... вот один очень быстрый подход, который может быть дополнительно оптимизирован для конкретных случаев:
bool IsTag(NSString * tagName) {
const size_t NTags = 45;
NSString * const tags[NTags] = {
@"a", @"dd", @"li", @"span", @"br", @"b", @"big", @"em", @"i", @"u",
@"small", @"strong", @"sub", @"sup", @"ins", @"del", @"code",
@"kbd", @"samp", @"tt", @"var", @"pre", @"abbr", @"center", @"acronym",
@"address", @"bdo", @"blockquote", @"q", @"cite", @"img", @"p", @"s",
@"font", @"strike", @"caption", @"th", @"tr", @"td", @"thead", @"tbody",
@"tfoot", @"col", @"colgroup", @"dfn"
};
/* pointer comparison will be effective if @a tagName may be derived
from a literal (or a copy of a literal):
*/
for (size_t idx = 0; idx < NTags; ++idx) {
if (tags[idx] == tagName) {
return true;
}
}
/* no match yet - perform character comparison: */
for (size_t idx = 0; idx < NTags; ++idx) {
if ([tags[idx] isEqualToString:tagName]) {
return true;
}
}
return false;
}
Конечно, вы можете разделить эту функцию, чтобы сделать использование более элегантным, если вы обнаружите, что делаете это часто.
Ответ Роба также хорош, но вам нужно применить контекст выполнения вашей программы, если вы действительно хотите быстрее. Мой подход может быть во много раз быстрее, чем у Роба, или Роб может быть во много раз быстрее, чем этот подход - это зависит от контекста выполнения!