在Swift中过滤数组内的字典

3

我有一个带有字典的数组示例:

[{
    "CATEGORYNAME" = "name0";
    "CATEGORYSUBID" = 2;
    "ID" = 1;
}, {
    "CATEGORYNAME" = "name1";
    "CATEGORYSUBID" = 2;
    "ID" = 2;
}, {
    "CATEGORYNAME" = "name2";
    "CATEGORYSUBID" = 0;
    "ID" = 3;
}]

我曾经用Objective C这样过滤它:
JSON_data = [[[Global SharedData]Categorys] filteredArrayUsingPredicate:
[NSPredicate predicateWithFormat:@"(CATEGORYSUBID == %@)", Filter]];

我尝试使用数组过滤器,但没有成功。
var JSON_data = Global.SharedData().Categorys
JSON_data = JSON_data.filter( ?????

JSON_data 包含所有数据,我已经用 Printin 打印出来了。

2个回答

11

筛选一个字典可以像下面这样简单。我们筛选出小于30岁的年龄。

var visitors = [["age" : 22], ["age" : 41], ["age" : 23], ["age" : 30]]

var filteredVisitors = visitors.filter({
    $0["age"] < 30 //access the value to filter
})

println(filteredVisitors)
//[["age" : 22], ["age" : 23]]

更多信息请参见:过滤Swift数组中的字典或对象属性


5

看起来这只是一个简单的翻译问题。您最好通过观看WWDC的各个会话来了解,但字面翻译如下:

let categories = Global.SharedData().Categorys()
JSON_data = categories.filter({
    if let subid = $0["CATEGORYSUBID"] {
        return subid == filter
    } else {
        return false
    }
})

如果那样行不通,您需要发布有关Global、SharedData、Categorys和JSON_data的更多信息。


我认为在Swift中没有filteredArrayUsingPredicate方法,你的代码结果是:'AnyObject[]'没有名为'filteredArrayUsingPredicate'的成员。 - Bosoud
全局变量、共享数据和类别是在Swift还是Objective-C中? - David Berry
它们在Objective-C中,我已经导入它们并且数组已经被填充。 - Bosoud
现在工作中 myCategories = JSON_data.filter({ if let subid : AnyObject! = $0["CATEGORYSUBID"] { return subid as NSObject == self.myFilter } else { return false } }) - Bosoud
你在上面的代码中使用了“Predicate”吗,@DavidBerry。 - Prajeet Shrestha
@PrajeetShrestha 我没有,显然我在某个时候改变了我的方法 :) - David Berry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接