Ios 在Objective C中,如果没有任何键,如何过滤多维NSArray?
因此,我将以下JSON存储在多维NSArray中:Ios 在Objective C中,如果没有任何键,如何过滤多维NSArray?,ios,objective-c,json,multidimensional-array,nsarray,Ios,Objective C,Json,Multidimensional Array,Nsarray,因此,我将以下JSON存储在多维NSArray中: [ [ ["First", "Mr Smith", 1], ["Second", "Mr Thomas", 0], ["Third", "Mr Man", 0], ["Fourth", "Mrs Man", 1], ], [ ["Fifth", "Mr Johnson", 0],
[
[
["First", "Mr Smith", 1],
["Second", "Mr Thomas", 0],
["Third", "Mr Man", 0],
["Fourth", "Mrs Man", 1],
],
[
["Fifth", "Mr Johnson", 0],
["Sixth", "Mr Mr", 1],
["Seventh", "Mr Sir", 1],
]
]
在Objective-C中(用于测试)
我想创建另一个数组,其中只包含最终值为1的元素。
我已经在这里坐了好几个小时,试着在网上找到各种不同的谓词建议,但似乎都不管用。任何帮助都将不胜感激
NSMutableArray* validArrayObjects = [[NSMutableArray alloc] init];
for (NSArray* arrayOfArrays in arrayOfArrayObjects)
{
for(NSArray* arrayOfObjects in arrayOfArrays)
{
id obj = [array lastObject];
if ([obj isKindOfClass:[NSNumber class]]) {
NSNumber *num = (NSNumber *)obj;
if ([num isEqualToNumber:@(1)]) {
[validArrays addObject:array];
}
}
}
}
这将遍历所有JSON对象(当然,假设您已经解析过),然后检查每个数组对象中的最后一个索引,查看其是否为1。如果是,请将其添加到有效对象数组。使用
NSPredicate
筛选数组,然后按如下方式尝试:-
NSMutableArray *mutArr=[NSMutableArray array];
for (NSArray *jsonArr in json)
{
NSArray *filterArr=[jsonArr filteredArrayUsingPredicate:
[NSPredicate predicateWithFormat:
@"SELF CONTAINS[CD] %@",@1]];
[mutArr addObject:filterArr];
}
NSLog(@"%@",mutArr);
你不需要谓词。写一些简单的代码来迭代你需要的数组。写代码,检查每个条目,看看它是否通过测试。我希望有一个更优雅的解决方案存在,但我想几个循环就可以了。我发现写软件是相当优雅的,如果做得好的话。我发现许多所谓的“优雅的解决方案”,使用某种“为我做一切”的工具,比简单地编写代码更长、更难看、更慢、更难理解。另外,OP有一个数组的数组。您的代码缺少一个级别。是,我刷新时正在编辑。我已经习惯了swift lol。我会把它清理干净的。你不能像现在这样比较这两个数字。@Aggressor-你应该研究一下
NSPredicate
,它会简化你的代码,是过滤数组的最简单方法变量array
来自哪里?
NSMutableArray *mutArr=[NSMutableArray array];
for (NSArray *jsonArr in json)
{
NSArray *filterArr=[jsonArr filteredArrayUsingPredicate:
[NSPredicate predicateWithFormat:
@"SELF CONTAINS[CD] %@",@1]];
[mutArr addObject:filterArr];
}
NSLog(@"%@",mutArr);