为什么 NS 谓词无法解析我在 NSArray 索引上的条件语句
Why does NS predicate failing to parse my conditional statement on NSArray Index
我正在使用 jsonSerialization 通过 api 检索网络数据。
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: responseData options: NSJSONReadingMutableContainers error: &e];
然后我可以使用以下谓词获取所需的数据。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"value == 1 && day = 0"];
NSArray *filteredArray = [[jsonArray filteredArrayUsingPredicate:predicate] valueForKey:@"hour"];
这为我提供了我想要的数据的 filteredArray。
filteredArray = ( 0, 1, 2, 7, 8, 9, 14, 15, 16, 17 )
我需要从这个 filteredArray 中提取所有连续数字的开始和结束。例如,在上面的数组中,这些是 (0, 2, 7, 9, 14, 18)。我试图通过将数组索引作为条件传递,在我的 filteredArray 上使用第二个谓词来实现此目的。
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"if (filteredArray[1] - filteredArray[0] !=0)"];
这让我的程序崩溃了。我以为我可以通过这种方式将数组索引传递给谓词?
NSPredicate
是错误的 API 过滤范围。
我建议将索引转换为 NSIndexSet
并枚举范围
NSMutableIndexSet *indexSet = [NSMutableIndexSet indexSet];
for (NSNumber *index in filteredArray) {
[indexSet addIndex:index.unsignedIntegerValue];
}
[indexSet enumerateRangesUsingBlock:^(NSRange range, BOOL * _Nonnull stop) {
NSLog(@"%ld, %ld", range.location, range.length);
}];
我正在使用 jsonSerialization 通过 api 检索网络数据。
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: responseData options: NSJSONReadingMutableContainers error: &e];
然后我可以使用以下谓词获取所需的数据。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"value == 1 && day = 0"];
NSArray *filteredArray = [[jsonArray filteredArrayUsingPredicate:predicate] valueForKey:@"hour"];
这为我提供了我想要的数据的 filteredArray。
filteredArray = ( 0, 1, 2, 7, 8, 9, 14, 15, 16, 17 )
我需要从这个 filteredArray 中提取所有连续数字的开始和结束。例如,在上面的数组中,这些是 (0, 2, 7, 9, 14, 18)。我试图通过将数组索引作为条件传递,在我的 filteredArray 上使用第二个谓词来实现此目的。
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"if (filteredArray[1] - filteredArray[0] !=0)"];
这让我的程序崩溃了。我以为我可以通过这种方式将数组索引传递给谓词?
NSPredicate
是错误的 API 过滤范围。
我建议将索引转换为 NSIndexSet
并枚举范围
NSMutableIndexSet *indexSet = [NSMutableIndexSet indexSet];
for (NSNumber *index in filteredArray) {
[indexSet addIndex:index.unsignedIntegerValue];
}
[indexSet enumerateRangesUsingBlock:^(NSRange range, BOOL * _Nonnull stop) {
NSLog(@"%ld, %ld", range.location, range.length);
}];