从Swift中的字典数组中返回一个特定的字典

时间:2015-03-23 11:11:26

标签: ios arrays swift dictionary

我从一个按顺序改变的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

3 个答案:

答案 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;