我有一本字典,我正在添加这样的值......
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
,我不想添加它。否则,我想添加它。
这里的基本思想是将集合视图项中的数据添加到字典数组中。当我单击每个集合视图项上的按钮时,它上面的数据被添加到一个dict数组中。同时在tableviewcell中显示这些数据。但是,当我从tableview&再次访问collectionview项目并单击其他一些collecn.view项目,以便像以前一样将它们添加到字典数组中,然后再次添加最初添加到字典数组中的项目。这必须以某种方式防止。
正如另一个SO用户所建议的那样,试图阻止这种重复......
if self.arrayOfDictionary.contains(where: { (dict) -> Bool in
"\(dict["id"] ?? "")" != "\(dictionary["id"] ?? "")"}) {
self.arrayOfDictionary.append(dictionary)
}
但这似乎不起作用。有了这个,没有任何东西被添加到数组中,它完全是空的。希望有人能帮忙......
答案 0 :(得分:1)
尝试使用此代码以避免重复
我希望" 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)
}
答案 1 :(得分:0)
每次执行循环检查唯一性时,我都会有更好的想法。
维护一个与collectionView Items数组大小相同的Bool数组,每个数组都包含预定义的false值。
当您单击集合View项目的按钮时,更改具有相同索引的Bool数组的标志。同时您也可以禁用该按钮(如果需要)。否则,每当用户单击按钮时,只需检查Bool数组中的标志,并根据需要将Dictionary添加到新数组中。
在这里,您的新阵列将被执行,您也将进行相同的循环过程和时间。
答案 2 :(得分:0)
解决问题的一种方法是构建一个包含产品详细信息的结构:
/// Details Of A Product
struct ProductDetails{
var id: String!
var quantity: Int!
var sellingPrice: Int!
}
然后创建一个字典,用于存储产品详细信息,密钥为“ID”,例如:
var products = [String: ProductDetails]()
然后你可以创建一个这样的产品:
let productA = ProductDetails(id: "1", quantity: 100, sellingPrice: 10)
要在字典中添加唯一的产品,您可以使用以下功能:
/// 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
}
}
我对此进行了快速测试,并且不允许具有重复ID的产品。当然,您可以根据需要更改参数。