2017-07-28 103 views
0

包含多個數據類型我有這樣一個數組: -濾波陣列中Swift3

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 
} 

我想過濾的數組,其中價格> 2000

我嘗試let searchByInts = arrayData.filter({m in m.price < 200}) 但收到錯誤:

Contextual closure type '(Dictionary) -> Bool' expects 1 argument, but 0 were used in closure body

如何篩選基於價格

+0

價格是字符串,您可以將其與SRING –

+0

比不上試試這個rrayData.filter({在INT(m.price M)<200}) –

+0

@MikeAlter,好抓住。我更新我的模型 – pkc456

回答

1

這類陣列的工作代碼:

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

順便說一句,請寫出下列使用文字:

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

仍然不知道,如果那是什麼你實際上想要因爲你的目標是不清楚。你有一個數組字典數組,它實際上包含你想要過濾的值。 如果 a BottleModel的成本超過2000,是否要保留它包含的整個數組以及該數組所在的字典?您可能想要在過濾之前或之後將整個數據映射到一個平面數組中。

使用flatMap備選:

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

這工作正常。如果我想連接兩個條件,例如: - price> 200 && reviews> 50 – pkc456

+0

@ pkc456您可以這樣做,並擴展最內部的塊:'$ 0.price> 200 && $ 0.reviews> 50'。 – luk2302