添加字典时避免重复

我有一个字典,我正在添加像这样的值…

var mydictionary = ["id": "", "quantity": "","sellingPrice":""] as [String : Any] dictionary["id"] = product?.id dictionary["quantity"] = product?.quantity dictionary["sellingPrice"] = product?.theRate 

而我把这些值添加到像这样的数组…

 self.arrayOfDictionary.append(mydictionary) 

但是,如果arrayOfDictionary已经包含mydictionary ,我不想添加它。 否则,我想添加它。

这里的基本思想是将集合视图项中的数据添加到字典数组中。 当我点击每个集合查看项目上的button时,数据就被添加到字典数组中。 同时在tableviewcell中显示这些数据。 但是,当我从tableview中导航并再次访问collectionview项目并单击其他collecn.view项目,以便像以前那样将它们添加到字典数组中时,最初添加到字典数组中的项目获取再次添加。 这必须以某种方式阻止。

正如另一个SO用户所build议的这样的尝试,以防止这种重复…

  if self.arrayOfDictionary.contains(where: { (dict) -> Bool in "\(dict["id"] ?? "")" != "\(dictionary["id"] ?? "")"}) { self.arrayOfDictionary.append(dictionary) } 

但是这似乎不起作用。 没有任何东西被添加到数组中,而它完全是空的。 希望有人能帮助…

试试这个代码,以避免重复

我希望“id”的价值在你的字典中是唯一的。

  var mydictionary = ["id": "1", "quantity": "","sellingPrice":""] as [String : Any] var arrayOfDictionary = [Dictionary<String, Any>]() //declare this globally let arrValue = arrayOfDictionary.filter{ (($0["id"]!) as! String).range(of: mydictionary["id"]! as! String, options: [.diacriticInsensitive, .caseInsensitive]) != nil } if arrValue.count == 0 { arrayOfDictionary.append(mydictionary) } 

每当你执行循环检查独特的内容,我已经有了更好的想法。

维护一个与您的collectionView Items数组的大小相同的Bool数组,每个数组都有预定义的假值。

当您点击集合查看项目的button时,更改具有相同索引的Bool数组的标志。 同时你也可以禁用button(如果你想)。 否则,无论何时用户点击button,只需从Bool数组中检查标志,并根据需要将Dictionary添加到新数组中。

在这里,你的新数组将被执行,你也将循环同样的过程和时间。

解决这个问题的一种方法是构build一个包含产品细节的结构:

 /// Details Of A Product struct ProductDetails{ var id: String! var quantity: Int! var sellingPrice: Int! } 

然后创build一个存储产品详细信息的字典,其中的关键字是“ID”,例如:

 var products = [String: ProductDetails]() 

然后你可以创build一个如下的产品:

 let productA = ProductDetails(id: "1", quantity: 100, sellingPrice: 10) 

要添加一个独特的产品到你的字典,你可以使用这样的function:

 /// Adds A Product To The Products Dictionary /// /// - Parameter product: ProductDetails func addProductDetails(_ product: ProductDetails){ //1. If A Product Exists Ignore It if products[product.id] != nil{ print("Product With ID \(product.id!) Already Exists") }else{ //2. It Doesn't Exist So Add It To The Dictionary products[product.id] = product } } 

我很快testing了它,它不允许有重复ID的产品。 当然你也可以根据需要改变参数。