在字典

时间:2017-11-08 06:25:19

标签: ios swift dictionary

我有一本字典,我正在添加这样的值......

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)
    }

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

3 个答案:

答案 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的产品。当然,您可以根据需要更改参数。