在Swift3中过滤包含多种数据类型的数组

时间:2017-07-28 10:48:51

标签: ios arrays swift3 filter

我有一个类似的数组: -

var arrayData : Array<Dictionary<String, [BottleModel]>> = []

瓶子模型: -

class BottleModel: NSObject {

    var name : String
    var price : Int
    var reviews : Int
    var category : String
    var quantity : String
    var id : String
    var shopData : ShopModel
}

我想要价格为&gt的过滤数组; 2000

我尝试了let searchByInts = arrayData.filter({m in m.price < 200}) ,但收到了以下错误:

  

上下文关闭   type&#39;(Dictionary) - &gt;布尔&#39;期待1个论点,   但在封闭体中使用了0

如何根据价格过滤此类阵列

1 个答案:

答案 0 :(得分:1)

工作代码:

let searchByInts = arrayData.filter { $0.values.contains { $0.contains { $0.price > 2000 } } }

请顺便写下以下文字:

var arrayData : [[String : [BottleModel]]] = []

仍然不知道这是否是你真正想要的,因为你的目标非常不清楚。你有一个数组字典数组,它实际上包含你想要过滤掉的值。 如果一个BottleModel的成本超过2000你想保留它所包含的整个数组和数组所在的字典吗?您可能希望在过滤之前或之后将整个数据映射到一个平面数组中。

替代使用flatMap

let flat = arrayData.flatMap { $0.values.flatMap { $0 } }
let searchByInts2 = flat.filter { $0.price < 200 } // or some other criteria