【问题标题】:How to remove element in dictionary by using filter in iOS Swift如何在 iOS Swift 中使用过滤器删除字典中的元素
【发布时间】:2020-03-15 08:58:04
【问题描述】:

我有一个看起来像这样的字典,我想删除 *所有包含 stock = 0 的元素。

    variations =     {
    "64FB5468-96E9-41A4-A779-3FB57FF1296B" =         {
        price = 10;
        sku = 123456;
        stock = 1;
        volume = 1L;
    };
    "A5EDB714-3D39-42DA-9A5C-2392D39C3AEB" =         {
        price = 20;
        sku = 254648;
        stock = 0;
        volume = 2L;
    };
    "BCA98B51-B058-4ABE-9010-54B080B819FB" =         {
        price = 30;
        sku = 284964;
        stock = 0;
        volume = 3L;
    };
};

我使用了下面的代码,但是,它在展开错误时返回 found nil。如何正确删除变体字典中库存为 0 的字典? kSTOCK 是字符串“stock”的常量

    let filterAllItems = self.allItems.filter({(($0.variations as AnyObject)[$0] as! [String:Any])[kSTOCK] as! Int > 0})

【问题讨论】:

  • 你的问题是模棱两可的:你想删除一个元素还是所有匹配条件的元素?那个对象是什么类型的,一个结构体(因为.variations)还是一个字典?带有 UUID 键的字典的声明类型是什么:[String:Int][String:Any]
  • 嗨,很抱歉造成混乱。我想删除所有符合条件的元素。在这种情况下,变体字典中应该只剩下一个字典。带有 UUID 键的字典的类型为 [String:Any]。

标签: ios swift dictionary filter


【解决方案1】:

假设allItems[String:Any] 字典,制作variations 的(可变)副本,过滤对象,删除找到的键的值并将字典重新分配给allItems

if var variations = allItems["variations"] as? [String:[String:Any]] {
    let allItemsWithStock0 = variations.filter({($0.value["stock"] as? Int) == 0})
    for (key, _) in allItemsWithStock0 {
        variations.removeValue(forKey: key)
    }
    allItems["variations"] = variations
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 2016-11-22
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多