检查NSArray在Swift中是否包含NSDictionary键?

时间:2016-02-19 03:28:51

标签: ios swift nsarray nsdictionary

我有一系列NSDictionary,我想检查特定的NSDictionary" key"是否存在于NSArray中。

我试过

if let val = dict["key"] {
    if let x = val {
        println(x)
    } else {
        println("value is nil")
    }
} else {
    println("key is not present in dict")
}

let arrayOfKeys = dictionary.allKeys
if (arrayOfKeys.containsObject(yourKey)) {

}
else {
}

但这是针对单个数组对象的。还

if ([[dictionary allKeys] containsObject:key]) {
    // contains key
}

此单独NSDictionary的方法不适用于NSArray。

另外

if readArray.contains(["A":1]) {                  ALToastView.toastInView(UIApplication.sharedApplication().keyWindow, withText: "Already added")
      }else{
           readArray.append(["A":0]
       }

如果键#34; A"的更改值,此代码将在数组中再次添加相同的键。

实施例。我的数组包含字典[" A":1],我想检查键#34; A"是否存在? 如何检查Array中的任何键?我需要迭代数组吗?提前谢谢。

3 个答案:

答案 0 :(得分:1)

参考以下示例:

var array = [[String:Any]]()

array.append(["key1":"value1"])
array.append(["key2":"value2"])
array.append(["key3":"value3"])
array.append(["key4":"value4"])
array.append(["key5":"value5"])

let key = "key5"

if let index = (array.indexOf { (dict) -> Bool in
    dict[key] != nil
})
{
    print("Key Found at = \(index) ")
} else {
    print("Key not Found")
}

答案 1 :(得分:0)

您可以使用此方法。基本上你通过dict数组迭代得到它的索引和dict的元组,如果dict包含键,你将索引存储在数组中。

let arrayOfDict = [
["key1":"value1", "key2":"value2"],
["key3":"value3", "key4":"value4", "key5":"value5"],
["key6":"value6", "key7":"value7", "key8":"value8"],
["key6":"value6", "key7":"value7", "key8":"value8"]
];

let keyToCheck = "key6"
var foundIndex = [Int]()
for (index, dict) in arrayOfDict.enumerate()
{
    if let item = dict[keyToCheck] {
            foundIndex.append(index)
    }
}
if foundIndex.count > 0 {
    print("Found at \(foundIndex)")
} else {
    print ("not found")
}

答案 2 :(得分:0)

如果您想获取包含键和字典索引的词典,也可以使用此方法。

let newArray = arrayOfDict.enumerate().filter { (tuple:(index: Int, element: Dictionary<String, String>)) -> Bool in
    if tuple.element.keys.contains(keyToCheck) {
        return true
    } else  {
        return false
    }
}

newArray将是一个类型为元组的数组(Int:[String:String]),其中tuple.0将是索引,而tuple.1将是字典