如何在iOS Swift中使用过滤器删除字典中的元素
我有一个类似这样的字典,我想删除*所有包含stock=0的元素如何在iOS Swift中使用过滤器删除字典中的元素,ios,swift,dictionary,filter,Ios,Swift,Dictionary,Filter,我有一个类似这样的字典,我想删除*所有包含stock=0的元素 variations = { "64FB5468-96E9-41A4-A779-3FB57FF1296B" = { price = 10; sku = 123456; stock = 1; volume = 1L; }; "A5EDB714-3D39-42DA-9A5C-2392D39C3AEB" =
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;
};
};
我使用了下面的代码,但是,它在展开错误时返回find nil。如何正确删除字典中有0个库存的字典?kSTOCK是字符串股票的常数
let filterAllItems = self.allItems.filter({(($0.variations as AnyObject)[$0] as! [String:Any])[kSTOCK] as! Int > 0})
假设allItems是一个[String:Any]字典,创建变体的可变副本,过滤对象,删除找到的键的值,并将字典重新分配给allItems
您的问题模棱两可:是要删除一个元素,还是要删除与条件匹配的所有元素?那个对象是什么类型的,是因为.variations而产生的结构还是字典?UUID键为:[String:Int]或[String:Any]的字典的声明类型是什么?您好,很抱歉造成混淆。我想删除所有符合条件的元素。在这种情况下,变体词典中应该只剩下一本词典。带有UUID键的字典类型为[String:Any]。
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
}