我从一个按顺序改变的API中获取了一系列字典,我正在尝试找出如何识别我需要的元素。
如果我知道我需要哪个元素,我会这样做:
let DataDictionary = DataArray[0] as NSDictionary
但问题是数组的顺序不会保持不变,所以我不需要通过索引访问,而是1)搜索数组,2)返回带有匹配键值对的字典。如:“if'id = 98765'然后返回此词典”:
for element in DataArray as Array<Dictionary<String,String>> {
if element["id"] == "987654" {
println("\(element)")
}
}
我不认为我可以用这种方式进行类型转换,如果我犯了很多其他错误,我也不会感到惊讶......
如果有人可以就此提供任何指导,那将是惊人的。如果我的解释不够详细,我会很乐意提供更多细节 - 这是我的第一篇Stack Overflow帖子!
一切顺利, OLI
答案 0 :(得分:5)
循环工作,filter
函数也是如此,但这是NSPredicate
的用途:
let array = [
["id": "1", "theOne": "no"],
["id": "2", "theOne": "no"],
["id": "98765", "theOne": "yes"],
["id": "4", "theOne": "no"]
]
let predicate = NSPredicate(format: "(id == '98765')")!
let theOne = (array as NSArray).filteredArrayUsingPredicate(predicate).first
修改强>
第二个想法,过滤器不那么冗长:
let theOne = array.filter { $0["id"] == "98765" }.first
答案 1 :(得分:1)
对于swift 3.0(&#34; filteredArrayUsingPredicate(谓词)&#34; )更新如下:
let array = [
["id": "1", "theOne": "no"],
["id": "2", "theOne": "no"],
["id": "98765", "theOne": "yes"],
["id": "4", "theOne": "no"]
]
let predicate = NSPredicate(format: "(id == '98765')")!
let theOne = (array as NSArray).filtered(using: predicate).first
由于
答案 2 :(得分:0)
我认为这可以起作用......没有经过测试。
var dictionaryId: Int?
for dictionary in DataArray {
if let dictionary as? NSDictionary {
dictionaryId = dictionary["id"] as? Int
if dictionaryId != nil && dictionaryId ==98765
{
return dictionary;
}
}
}
return nil;