首页 文章

在字典数组中查找键值对

提问于
浏览
2

我有两个字典数组 . 我想通过搜索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()

1 回答

  • 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!")
    

相关问题