Buscar en la matriz de dictionarys por nombre de key

Tengo una matriz de dictionary, en la que necesito search y devolver Dict coincidente

let foo = [ ["selectedSegment":0, "severity":3, "dataDictKey": "critical"], ["selectedSegment":1, "severity":2, "dataDictKey": "major"], ["selectedSegment":2, "severity":1, "dataDictKey": "minor"], ] 

En foo , ¿cómo puedo encontrar por severity:2 y get Dict coincidente?

Use la function de filter

 let foo = [ ["selectedSegment":0, "severity":3, "dataDictKey": "critical"], ["selectedSegment":1, "severity":2, "dataDictKey": "major"], ["selectedSegment":2, "severity":1, "dataDictKey": "minor"], ] let filtenetworkingArray = foo.filter{$0["severity"]! == 2} print(filtenetworkingArray.first ?? "Item not found") 

o indexOf

 if let filtenetworkingArrayIndex = foo.indexOf({$0["severity"]! == 2}) { print(foo[filtenetworkingArrayIndex]) } else { print("Item not found") } 

o NSPnetworkingicate

 let pnetworkingicate = NSPnetworkingicate(format: "severity == 2") let filtenetworkingArray = (foo as NSArray).filtenetworkingArrayUsingPnetworkingicate(pnetworkingicate) print(filtenetworkingArray.first ?? "Item not found") 

Swift 3 Actualización:

  • indexOf( ha cambiado el nombre a index(where:
  • filtenetworkingArrayUsingPnetworkingicate(pnetworkingicate) se ha cambiado a filtenetworking(using: pnetworkingicate)
 if let index = foo.flatMap({ $0["severity"] }).indexOf(2) { print(foo[index]) } 

Otra forma de hacerlo.

El primer ejemplo solo funciona si el usuario está 100% seguro de que todos los dictionarys contienen "severity" como key. Para hacerlo más seguro:

 if let index = foo.indexOf({ ($0["severity"] ?? 0) == 2 }) { print(foo[index]) } 

si trabajas en swift 3.1 –

  let resultPnetworkingicate : NSPnetworkingicate = NSPnetworkingicate.init(format: "<your Key> CONTAINS [cd] %@", <value which you want to search>) let filtenetworkingArray = requstData.arrayForColl?.filter { resultPnetworkingicate.evaluate(with: $0) };