gpt4 book ai didi

ios - Swift - 比较字典

转载 作者:行者123 更新时间:2023-11-28 13:07:29 25 4
gpt4 key购买 nike

我有两个字典,看起来像:

var dict1 = [Int: [String: AnyObject]]

var dict2 = [Int: [String: AnyObject]]

例如:

dict1: [0: ["sender": "user1", "time": NSDate(), "mId": "as2f2ASf"], [1: ["sender": "user1", "time": NSDate(), "mId": "Sjf82FsJ"]

dict2: [0: ["sender": "user2", "time": NSDate(), "mId": "J2fAS92D"], [1: ["sender": "user2", "time": NSDate(), "mId": "Sjf82FsJ"]

我想查明字典中是否有具有相同 mId 的数据,如果有,我想执行一些操作。我为此编写了这段代码并遇到了这些错误。

for (_, value) in dict1! {
for content in value {
if content.0 == "mId" {
var mID = content.1
for (_, 2ndValue) in dict2 {
for 2ndContent in 2ndValue {
if 2ndContent.0 == "mId" {
var 2ndMID = 2ndContent.1
if mID == 2ndMID {
//Do Some Action
}
}
}
}
}
}
}

以下是错误: https://www.dropbox.com/s/e28ple6640hkrzo/Bildschirmfoto%202015-08-28%20um%2021.21.54.png?dl=0

最佳答案

首先,正如 Eric 在他的评论中所说,您会收到错误,因为您不能以数字开头变量名。

其次,您在这里所谓的“字典”实际上是一个元组数组 - 如果您通过运行 var dict1 = [Int,[ String,AnyObject]()) 你得到:dict1: [(Int, [String : AnyObject])] = 0 个值

具有等效结构的字典将被定义为:var dict1 = [Int:[String:AnyObject]]() - 这会返回dict2: [Int : [String : AnyObject]] = 0 键/值对在 REPL 中。

因此,您显示的 dict1 和 dict2 声明将不起作用。它们需要声明如下以匹配您指定的类型:

var dict1 = [(0, ["sender": "user1", "time": NSDate(), "mId": "as2f2ASf"]), (1, ["sender": "user1", "time": NSDate(), "mId": "Sjf82FsJ"])]

var dict2 = [(0, ["sender": "user2", "time": NSDate(), "mId": "J2fAS92D"]), (1, ["sender": "user2", "time": NSDate(), "mId": "Sjf82FsJ"])]

如果你想使用实际的字典,使用:

var dict3 = [[0: ["sender": "user1", "time": NSDate(), "mId": "as2f2ASf"]], [1: ["sender": "user1", "time": NSDate(), "mId": "Sjf82FsJ"]]]

虽然我可以看到您在发布的代码中试图实现的目标,但我认为您采用的方法不正确。每当您有 4 层嵌套的 for 循环时,您都应该考虑是否有更好的方法来解决问题。当您只对“mId”的值感兴趣时,您正在遍历字典中的所有键。只需查找该键的值就可以摆脱 2 个循环和对您不感兴趣的事物进行大量无意义的迭代:

for (_,value1) in dict1 {
if let mld1 = value1["mId"] {
for(_,value2) in dict2 {
if let mld2 = value2["mId"] {
if mld1 == mld2 {
println("Found diff")
}
}
}
}
}

if let 是确保您进行有效比较所必需的(即如果两个字典中 'mld' 的值为 nil 时避免误报) .不知道这在您的数据模型中是否可行,但总是值得彻底研究。请注意,此解决方案使用元组数组,如您的示例中所示 - 如果您使用实际词典,则需要稍微不同的东西。

关于ios - Swift - 比较字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32278443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com