繁体   English   中英

检查字典是否在Swift 3中的字典数组中

[英]Check if Dictionary is inside Array of Dictionaries in Swift 3

我有一系列这样的词典:

var suggestions = [["keyword": "apple", "identifier": "0"], ["keyword": "banana", "identifier": "1"], ["keyword": "carrot", "identifier": "2"]]

我想追加建议数组,在我这样做之前,我想知道字典是否已经存在于我的数组中以防止重复。 我怎么能在Swift 3中做到这一点?

我试图使用contains(where: ([String: String)])函数的Swift 3,但我似乎无法使它工作。

更新:丹尼尔霍尔的答案使其成功。 这是Swift 3的确切代码:

let newDictionary = ["keyword": "celery", "identifier": "3"]
if !suggestions.contains(where: {$0 == newDictionary}) {
    suggestions.append(newDictionary)
}

我认为解决方案比其他答案建议的更直接。 只需使用:

let newDictionary = ["keyword":"celery", "identifier": "3"]
if !suggestions.contains{ $0 == newDictionary } {
    suggestions.append(newDictionary)
}

这样可以确保现有的词典数组在添加之前不包含要添加的新词典。

您可以创建表示数据类型的结构,而不是使用字典。

internal struct Entry {
    let id: String
    let keyword: String
}

extension Entry: Equatable {
    static func == (lhs: Entry, rhs: Entry) -> Bool {
        return lhs.id == rhs.id && lhs.keyword == rhs.keyword
    }
}

let suggestions: [Entry] = [] //...
let newEntry = Entry(id: "3", keyword: "orange")


if suggestions.contains(newEntry) {
    // Do Something
} else {
    // Insert maybe?
}

如果您只想继续使用字典,则可以使用contains

let newEntry = ["keyword": "orange", "identifier": "4"]
let containsEntry = suggestions.contains{ $0["identifier"] == newEntry["identifier"] }
if containsEntry {
    // Do something
} else {
    // Insert maybe?
}

我会去结构选项。

应该如此简单

suggestions.contains(where:{$0.contains(where:{$0=="keyword" && $1=="carrot"})})

在哪里检查“关键字”:“胡萝卜”键值对。 语法有点麻烦,因为你正在寻找某些东西。

请注意,以上是完整查询的简写...

suggestions.contains(where:{ 
(dict: [String:String])->Bool in  dict.contains(where:{
  (key: String, value: String) -> Bool in (key=="keyword" && value=="carrot") 
  })
})

这可能会或可能不会对您更简单。

另一个好的和直接的解决方案,丹尼尔霍尔答案的可靠替代方案是:

let contains = suggestions.map(){$0 == newDictionary}.contains(true)
if !contains{
    suggestions.append(newDictionary)
}

我发布了这个答案,因为它没有使用contains(where: ([String: String]) throws Bool)函数。


说明:基本上, suggestions.map(){$0 == newDictionary}创建一个[Bool] ,它在每个位置上包含一个Bool值,用于检查数组的该位置是否位于newDicitonary 然后, .contains(true)检查是否newDictionary是对在任意位置suggestions阵列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM