NSMutableArray *array = [NSMutableArray arrayWithObjects:@{@"name":@"Jenny",@"age":@23},@{@"name":@"Daisy",@"age":@27},nil];
是否可能通过字典对象中的键删除对象?
例如,通过年龄= 27删除对象。
NSMutableArray *array = [NSMutableArray arrayWithObjects:@{@"name":@"Jenny",@"age":@23},@{@"name":@"Daisy",@"age":@27},nil];
是否可能通过字典对象中的键删除对象?
例如,通过年龄= 27删除对象。
要从NSArray中筛选对象,请调用filteredArrayUsingPredicate
:
NSArray *array = @[@{@"name":@"Jenny",@"age":@23},@{@"name":@"Daisy",@"age":@27}];
NSArray *array2 =
[array filteredArrayUsingPredicate:
[NSPredicate predicateWithBlock:^BOOL(id obj, NSDictionary *d) {
return ![[obj valueForKey:@"age"] isEqual:@27];
}]];
array2
是我们想要的数组 - 它是第一个没有年龄为27的数组。let array = [["name":"Jenny", "age":23],["name":"Daisy", "age":27]]
let array2 = array.filter {$0["age"] != 27}
您可以使用NSPredicate
创建一个新的数组,该数组中不包含不需要的条目。 NSPredicate
类似于数据库查询,其中输入的NSArray表示数据库,而输出数组是查询的响应。
NSArray *array = @[ @{@"name":@"Jenny",@"age":@23},
@{@"name":@"Daisy",@"age":@27} ];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age != 27"];
NSArray *filtered = [array filteredArrayUsingPredicate:predicate];
NSLog( @"%@", array );
NSLog( @"%@", filtered );
NSInteger indexToDelete = -1;
for (NSInteger i = 0; i < array.count; i++) {
NSDictionary *dict = array[i];
if ([dict[@"age"] integerValue] == 27) {
indexToDelete = i;
break;
}
}
if (indexToDelete > 0) {
[array removeObjectAtIndex:indexToDelete];
}
filteredArrayUsingPredicate
所吸引,我对性能很感兴趣,并决定使用Xcode的measureBlock
功能进行一次并行性能测试。遍历包含1,000个字典的数组,从每个数组中删除与整数值匹配的一个项目,并比较当项目非常接近数组开头、中间和末尾时的情况,两个版本在每种情况下都倾向于在几千分之一秒内完成,谓词过滤器在每种情况下都稍微快一些。(我们说的是大约0.269秒 vs 0.261秒)age == 27
,该怎么办? - user3386109