我有一个NSArray。可以说我里面有3个物体。 e.g
test (
{
Code = A;
Comment = "None ";
Core = Core;
},{
Code = B;
Comment = "None ";
Core = Core;
},{
Code = C;
Comment = "None ";
Core = Core;
})
我想搜索'Code'并返回数组索引。我怎样才能做到这一点?例如找到代码'b',我将返回'1'(因为它是数组中的第二个位置)。
答案 0 :(得分:2)
离开我的头顶,所以可能会有一些错别字。我假设你的数组中的对象是字典:
for (NSDictionary dict in testArray)
{
if ([[dict objectForKey:"Code"] isEqualToString:@"B"]
{
NSLog (@"Index of object is %@", [testArray indexOfObject:dict]);
}
}
您也可以使用(可能更高效)
- (NSUInteger)indexOfObjectPassingTest:(BOOL (^)(id obj, NSUInteger idx, BOOL *stop))predicate
在块上传递@"Code == 'B'"
的谓词。此方法将专门返回通过测试的对象的索引。
答案 1 :(得分:0)
如果定位到iOS 4.0或更高版本,则可以使用NSArray
方法来执行此操作。
– indexOfObjectPassingTest:
– indexesOfObjectsPassingTest:
等。
NSArray *test = [NSArray arrayWithObjects:
[NSDictionary dictionaryWithObjectsAndKeys:@"A", @"Code", @"None", @"Comment", @"Core", @"Core", nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"B", @"Code", @"None", @"Comment", @"Core", @"Core", nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"C", @"Code", @"None", @"Comment", @"Core", @"Core", nil],
nil];
NSIndexSet *indexes =[test indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
return [[obj valueForKey:@"Code"] isEqualToString:@"B"];
}];
NSLog(@"Indexes with Code B: %@", indexes);
答案 2 :(得分:0)
在最简单的形式中,我会使用以下内容:
- (NSInteger)indexForText:(NSString*)text inArray:(NSArray*)array
{
NSInteger index;
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
YourObject* o = (YourObject*)obj;
if ([[o property] isEqualToString:text]) {
index = idx;
*stop = YES;
}
}];
return index;
}