我有两本字典,看起来像:
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在他的评论中所说,你会得到错误,因为你不能用数字开始变量名。
其次,您在这里称之为“dictionary”的实际上是一个元组数组-如果您通过运行dict1,在Swift REPL中定义var dict1 = [Int,[String,AnyObject]()变量,您将得到:
dict1: [(Int, [String : AnyObject])] = 0 values
具有等效结构的字典将被定义为:
var dict1 = [Int:[String:AnyObject]]()-返回
dict2: [Int : [String : AnyObject]] = 0 key/value pairs
在回复中。
因此,您显示的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是确保进行有效比较所必需的(即,如果两个dict中的“mld”值都小于cc>,则避免误报)。不知道这在您的数据模型中是否可能,但始终值得深入研究。注意,这个解决方案使用元组数组,如您的示例所示-如果您使用实际的字典,您需要一些稍微不同的东西。

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

10-12 03:04