检查数组中的值是否为字典值?

时间:2015-07-09 10:49:53

标签: arrays swift

我正在寻找一种方法来查看某个值(存储在字典中)是否在数组中。数组如下所示:var array = Array<Dictionary<String, Int>>()

我在stackoverflow上环顾四周,发现了这个:How to check if an element is in an array。唯一的问题是我似乎无法通过编写contains来使用arrray.contains...方法。我做错了什么?

2 个答案:

答案 0 :(得分:6)

您可以在contains中使用contains来检查数组中的任何词典是否包含您要查找的值。

例如,要在数组a中搜索值1

let a: [[String: Int]] = [["a": 1, "b": 2], ["c": 3], ["d": 4]]

Swift 1.2:

if contains(a, {contains($0.values, 1)}) {
    println("it is in there")
}

Swift 2.0:

/* Thanks to @Qbyte for providing this solution */
if a.contains({ $0.values.contains(1) }) {
    print("it is in there")
}

这是有效的,因为数组a的每个成员都使用闭包{contains($0.values), 1}进行评估,看它是否为真。闭包获取它传递的字典,从中获取值数组,然后使用contains查看值是否在那里。

答案 1 :(得分:1)

您可以使用此扩展程序:

extension Array {
    func contains<T where T : Equatable>(obj: T) -> Bool {
        return self.filter({$0 as? T == obj}).count > 0
    }
}

您可以像以下一样进行测试:

var array1 = Array<Dictionary<String, Int>>()
array1 = [["zero": 0],["one": 1], ["two": 2]]

array1.contains(["zero": 0])   //true
array1.contains(["five": 5])   //false