如何使用两个不同的键查找 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];

正好相反

谓词必须大于或等于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 语法轻松完成此操作...