我有两个字典数组。我想通过搜索1)整个字典或2)第二个数组中字典中的键值对来迭代第一个数组。
如果我尝试搜索整个字典,我会收到错误:Cannot find an overload for 'contains' that accepts an argument list of type '(Array<Dictionary<String, String>>, [String : String])'
。
for var i = 0; i < arrayOne.count; i++ {
for item in arrayOne {
if contains(arrayTwo, arrayOne[i]) == nil {
// Do something
}
}
}
如果我尝试在第二个数组中搜索一个键值对,我会得到:Cannot subscript a value of type 'Array<Dictionary<String, String>>' with an index of type 'String'
for item in arrayOne {
if contains(arrayTwo, arrayOne["title"]) {
// Do something
}
}
我需要能够在第一个字典数组中搜索第二个字典数组中的某些值。我怎么能这样做?
编辑:两个数组都有相同的声明:
var arrayOne : Array<Dictionary<String, String>> = Array()
var arrayTwo : Array<Dictionary<String, String>> = Array()
答案 0 :(得分:2)
以下作品。您可以遍历每个数组的项目,将它们与另一个数组中的项目进行比较:
for item1 in arrayOne {
for item2 in arrayTwo {
if item1 == item2 {
println("found a dictionary common to both arrays")
}
}
}
在两个数组中搜索公共键/值对:
for dict1 in arrayOne {
for (key, value) in dict1 {
for dict2 in arrayTwo {
if dict2[key] == value {
println("found \(key):\(value) in both arrays")
}
}
}
}
如果您正在搜索特定密钥:
let key = "title"
for dict1 in arrayOne {
if let value = dict1[key] {
for dict2 in arrayTwo {
if dict2[key] == value {
println("found \(key):\(value) in both arrays")
}
}
}
}
您可以编写自己的arrayContains
函数,其中包含您需要的类型:
func arrayContains(array:[[String:String]], value:[String:String]) -> Bool {
for item in array {
if item == value {
return true
}
}
return false
}
然后用它来找到你想要的值:
// Save all of the dictionaries from the first array that aren't in the second array
var newArray:[[String:String]] = []
for item in arrayOne {
if !arrayContains(arrayTwo, item) {
newArray.append(item)
}
}
在数组中搜索特定的键/值对:
func arrayContains(array:[[String:String]], #key: String, #value: String) -> Bool {
for dict in array {
if dict[key] == value {
return true
}
}
return false
}
let result = arrayContains(arrayTwo, key: "title", value: "Alien!")