有没有更好的方法来比较一个字符串和多个字符串?
Posted
技术标签:
【中文标题】有没有更好的方法来比较一个字符串和多个字符串?【英文标题】:Is there any better way for comparing a string with multiple strings? 【发布时间】:2011-03-22 11:29:45 【问题描述】:我想比较一个字符串和多个字符串。例如
if([var isEqualToString:@"Box"]||[var isEqualToString:@"Ball"]|[varisEqualToString:@"Bat"])
some function
else
some function
在我的情况下,我必须与 15 个字符串进行比较,所以我必须检查 15 次。有没有其他更好的方法来比较它。是否有任何小的简单代码可以实现我的逻辑。
【问题讨论】:
【参考方案1】:您最好将字符串添加到 NSSet,如下所示:
NSSet *mySet = [NSSet setWithObjects:@"Box", @"Ball", @"Bat", nil];
if([mySet containsObject:string])
else
许多其他解决方案出于相同目的使用数组或字典。集合是正确的数据结构,因为它们是为了包含无序对象和测试成员资格而创建的。我很确定containsObject:
与NSArray
中需要进行元素搜索的相同方法相比,在恒定时间内运行。
【讨论】:
这里是 NSArray、NSSet 和相关类型之间的有趣比较:cocoawithlove.com/2008/08/nsarray-or-nsset-nsdictionary-or.html【参考方案2】:将您的字符串放入NSDictionary
:
NSNull *nullValue = [NSNull null];
NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:nullValue, nullValue, ..., nil forKeys:@"Box", @"Ball", ..., nil];
if ([dictionary objectForKey:var])
// var matches one of the keys, run function
else
// var doesn't match any of the keys, do something else
字典查找是 O(1),而数组查找可能是 O(log n)。对于 15 个元素来说没什么大不了的,但作为一般规则,字典或集合可能会表现得更好。如果您经常进行此搜索/比较,请考虑一些事情。
编辑
正如我所提到的,NSSet
也将在 O(1) 时间内进行查找:
NSSet *comparisonSet = [NSSet setWithObjects:@"Box", @"Ball", ..., nil];
if ([comparisonSet containsObject:var])
// var matches set object, run function
else
// var doesn't match any of the set objects, do something else
更简洁的代码,当然,但我认为NSSet
实例的创建时间要长得多。但是你只需要做一次,对吧?
【讨论】:
与其使用具有空值的字典,也许NSSet
更适合。
另外,您应该使用objectForKey:
而不是valueForKey:
和NSDictionary
。对于NSSet
,请使用containsObject:
。【参考方案3】:
您可以使用
创建一个数组NSArray *stringArray = [NSArray arrayWithObjects: @"Box", @"Ball", @"Bat", nil];
if([NSArray indexOfObject:var] != NSNotFound)
...
else
...
不是更好,但可能更具可读性。
【讨论】:
以上是关于有没有更好的方法来比较一个字符串和多个字符串?的主要内容,如果未能解决你的问题,请参考以下文章