大家好:)
我有一个简单的问题 - 对于以下NSMutableArray:
NSMutableArray * array = [[NSMutableArray alloc] initWithObjects:@“1”,@“2”,@“1”,@“2”,@“1”];
我们如何获取对象的所有索引;据说我想抓住1的索引?
所以应该说1在索引0,2和4处存在。
任何形式的帮助真的很感激:)
谢谢。
答案 0 :(得分:3)
- (NSIndexSet *)indexesMatchingObject:(id)anObject inArray:(NSArray *)anArray
{
NSIndexSet *indexSet = [anArray indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
return [obj isEqual:anObject];
}];
return indexSet;
}
像
一样使用它NSMutableArray *array = [[NSMutableArray alloc] initWithObjects: @"1", @"2",@"1",@"2",@"1",nil];
NSIndexSet *matchesIndexSet = [self indexesMatchingObject:@"1" inArray:array];
NSLog(@"%@",matchesIndexSet);
返回
[索引数:3(3个范围内),索引:(0 2 4)]
答案 1 :(得分:1)
你试过这个:
- (NSIndexSet *)indexesOfObjectsPassingTest:(BOOL (^)(id obj, NSUInteger idx, BOOL *stop))predicate
这会给:
NSMutableArray *array = [[NSMutableArray alloc] initWithObjects: @"1", @"2",@"1",@"2",@"1", nil];
NSIndexSet * index = [array indexesOfObjectsPassingTest:^BOOL (id obj, NSUInteger idx, BOOL *stop){
NSString* aString = obj;
return [aString isEqualToString:@"1"];
}];
最重要的是,您可以像这样创建一个NSArray类别:
@implementation NSArray(Upgraded)
- (NSIndexSet*) indexesMatchingObject:(id)objectToSearch
{
NSIndexSet *index = [self indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
return [obj isEqual:objectToSearch]);
}];
return index;
}
@end
可以这样使用:
NSMutableArray *array = [[NSMutableArray alloc] initWithObjects: @"1", @"2",@"1",@"2",@"1", nil];
NSIndexSet* index = [array indexesMatchingObject:@"1"];