如何使用两个不同的键查找 NSDictionary 的 NSArray 之间的数字
How to find number between of NSArray Of NSDictionary With Two Different Keys
这是我的代码片段:
NSMutableArray *arrTableData = [NSMutableArray new];
[arrTableData addObject:@{@"from":[NSNumber numberWithDouble:700], @"to":[NSNumber numberWithDouble:760]}];
[arrTableData addObject:@{@"from":[NSNumber numberWithDouble:760], @"to":[NSNumber numberWithDouble:820]}];
[arrTableData addObject:@{@"from":[NSNumber numberWithDouble:820], @"to":[NSNumber numberWithDouble:940]}];
[arrTableData addObject:@{@"from":[NSNumber numberWithDouble:940], @"to":[NSNumber numberWithDouble:990]}];
我只想使用 NSPredicate
查找 number == 800
。
案例:1
NSNumber *number = [NSNumber numberWithDouble:940];
NSPredicate *subQuery1 = [NSPredicate predicateWithFormat:@"from >= %@ OR to < %@",number,number];
NSArray *filteredArray = [arrTableData filteredArrayUsingPredicate:subQuery1];
- 我不喜欢使用 loop 和 enumerateObjectsUsingBlock
正好相反
谓词必须大于或等于from
且小于to
NSNumber *number = @800.0;
NSPredicate *subQuery1 = [NSPredicate predicateWithFormat:@"from <= %@ AND to > %@", number, number];
或
[NSPredicate predicateWithFormat:@"%@ >= from AND %@ < to", number, number];
试试这个,
NSMutableArray *arrTableData = [NSMutableArray new];
[arrTableData addObject:@{@"from":[NSNumber numberWithDouble:700], @"to":[NSNumber numberWithDouble:760]}];
[arrTableData addObject:@{@"from":[NSNumber numberWithDouble:760], @"to":[NSNumber numberWithDouble:820]}];
[arrTableData addObject:@{@"from":[NSNumber numberWithDouble:820], @"to":[NSNumber numberWithDouble:940]}];
[arrTableData addObject:@{@"from":[NSNumber numberWithDouble:940], @"to":[NSNumber numberWithDouble:990]}];
NSLog(@"%@",arrTableData);
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"from >= 800"];
NSArray *filterdArray = [[arrTableData filteredArrayUsingPredicate:predicate] mutableCopy];
NSLog(@"filter arr : %@",filterdArray);
它将给出 from 大于或等于 800 的字典数组!
试试这个:
NSArray *resultArray = [arrTableData filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(from >= %@) OR (to < %@)", @800,@800]];
过滤to < 800
NSArray *resultArray2 = [arrTableData filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(from < %@)", @800]];
这不会对之前的答案增加任何内容,但您确实应该考虑对我们的 Objective-C 代码进行现代化改造。您问题中的代码可以简化为...
NSMutableArray *arrTableData = [NSMutableArray new];
[arrTableData addObjectsFromArray: @[@{@"from":@700.0, @"to":@760.0},
@{@"from":@760.0, @"to":@820.0},
@{@"from":@820.0, @"to":@940.0},
@{@"from":@940.0, @"to":@990.0}]];
您可以通过选择编辑 -> 转换 -> 到现代 Objective-C 语法轻松完成此操作...
这是我的代码片段:
NSMutableArray *arrTableData = [NSMutableArray new];
[arrTableData addObject:@{@"from":[NSNumber numberWithDouble:700], @"to":[NSNumber numberWithDouble:760]}];
[arrTableData addObject:@{@"from":[NSNumber numberWithDouble:760], @"to":[NSNumber numberWithDouble:820]}];
[arrTableData addObject:@{@"from":[NSNumber numberWithDouble:820], @"to":[NSNumber numberWithDouble:940]}];
[arrTableData addObject:@{@"from":[NSNumber numberWithDouble:940], @"to":[NSNumber numberWithDouble:990]}];
我只想使用 NSPredicate
查找 number == 800
。
案例:1
NSNumber *number = [NSNumber numberWithDouble:940];
NSPredicate *subQuery1 = [NSPredicate predicateWithFormat:@"from >= %@ OR to < %@",number,number];
NSArray *filteredArray = [arrTableData filteredArrayUsingPredicate:subQuery1];
- 我不喜欢使用 loop 和 enumerateObjectsUsingBlock
正好相反
谓词必须大于或等于from
且小于to
NSNumber *number = @800.0;
NSPredicate *subQuery1 = [NSPredicate predicateWithFormat:@"from <= %@ AND to > %@", number, number];
或
[NSPredicate predicateWithFormat:@"%@ >= from AND %@ < to", number, number];
试试这个,
NSMutableArray *arrTableData = [NSMutableArray new];
[arrTableData addObject:@{@"from":[NSNumber numberWithDouble:700], @"to":[NSNumber numberWithDouble:760]}];
[arrTableData addObject:@{@"from":[NSNumber numberWithDouble:760], @"to":[NSNumber numberWithDouble:820]}];
[arrTableData addObject:@{@"from":[NSNumber numberWithDouble:820], @"to":[NSNumber numberWithDouble:940]}];
[arrTableData addObject:@{@"from":[NSNumber numberWithDouble:940], @"to":[NSNumber numberWithDouble:990]}];
NSLog(@"%@",arrTableData);
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"from >= 800"];
NSArray *filterdArray = [[arrTableData filteredArrayUsingPredicate:predicate] mutableCopy];
NSLog(@"filter arr : %@",filterdArray);
它将给出 from 大于或等于 800 的字典数组!
试试这个:
NSArray *resultArray = [arrTableData filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(from >= %@) OR (to < %@)", @800,@800]];
过滤to < 800
NSArray *resultArray2 = [arrTableData filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(from < %@)", @800]];
这不会对之前的答案增加任何内容,但您确实应该考虑对我们的 Objective-C 代码进行现代化改造。您问题中的代码可以简化为...
NSMutableArray *arrTableData = [NSMutableArray new];
[arrTableData addObjectsFromArray: @[@{@"from":@700.0, @"to":@760.0},
@{@"from":@760.0, @"to":@820.0},
@{@"from":@820.0, @"to":@940.0},
@{@"from":@940.0, @"to":@990.0}]];
您可以通过选择编辑 -> 转换 -> 到现代 Objective-C 语法轻松完成此操作...