【问题标题】:Filtering Arrays Containing Multiple Data Types in Swift3在 Swift3 中过滤包含多种数据类型的数组
【发布时间】:2018-01-04 09:45:45
【问题描述】:

我有一个类似的数组:-

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}) ,但出现以下错误:

上下文闭包 type '(Dictionary) -> Bool' 需要 1 个参数, 但是在闭包体中使用了 0

如何根据价格过滤这种数组

【问题讨论】:

  • 价格是字符串,不能和字符串比较
  • 试试这个 rayData.filter({m in Int(m.price)
  • @MikeAlter,很好。我更新我的模型
  • @MikeAlter,发生错误:- 'Dictionary' 类型的值(又名'Dictionary>')没有成员'price'跨度>

标签: ios arrays swift3 filter


【解决方案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

【讨论】:

  • 这很好用。如果我想连接两个条件,例如:- 价格 > 200 && 评论 > 50
  • @pkc456 你可以这样做并展开最里面的块:$0.price &gt; 200 &amp;&amp; $0.reviews &gt; 50.
猜你喜欢
  • 1970-01-01
  • 2017-06-05
  • 1970-01-01
  • 1970-01-01
  • 2019-10-25
  • 2018-09-07
  • 1970-01-01
  • 1970-01-01
  • 2019-12-31
相关资源
最近更新 更多