我有一个NSMutableArray,我想添加字符串。在将字符串添加到数组之前,我需要检查数组中是否已存在该字符串。无论如何知道这样做的好方法吗?
谢谢!
答案 0 :(得分:8)
如果顺序无关紧要,最简单的方法是切换到使用NSMutableSet。集合是无序的,NSSets和NSMutableSets只能包含每个对象一次。只有一个计数集(NSCountedSet)可以多次包含同一个对象。
如果顺序很重要,请继续使用NSMutableArray,并在添加之前使用-containsObject:
检查该对象是否已存在。
编辑:至于Lion,我们现在有NSOrderedSet和NSMutableOrderedSet!巧克力在我的花生酱中!我的巧克力中的花生酱!
与无序集合一样,您可以获得快速的成员资格测试,禁止重复,以及设置操作(联合,交集等)。与数组一样,您可以获得有序访问,包括可靠顺序枚举和索引访问。
因此,如果您需要拒绝重复但同时保留顺序,Lion的NS {,Mutable} OrderedSet类适合您。
答案 1 :(得分:1)
如果您只想做一次您所说的话,请使用containsObject:
,如
if (![myArray containsObject:theObject]) [myArray addObject:theObject];
请注意,这会对数组进行线性搜索,因此如果您要大量使用此操作,则不适合。如果您是,并且您不需要订购,则应使用NSSet
。如果您确实需要订购,则可以使用保持同步的NSArray
和NSSet
(例如,始终同时在两个集合中添加/删除相同的对象)。
答案 2 :(得分:0)
我更喜欢在here
中描述的NSPredicate简而言之
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"Nick", @"Ben", @"Adam", @"Melissa", nil];
NSPredicate *bPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES[c] %@", your_search_key];
NSArray *beginWithB = [array filteredArrayUsingPredicate:bPredicate];
if ([beginWithB count] > 0)
{
//Handle duplicate
}