【问题标题】:Swift - How to filter multi dimentional ArraySwift - 如何过滤多维数组
【发布时间】:2019-08-05 16:23:43
【问题描述】:

我在这样的数组里面有数组;

var trucks: [boxes]
var boxes: [items]
var items: [fruits]

我想在项目中找到“苹果”并将它们保存在卡车数组中。 (我将重新加载 collectionView 并显示新的过滤部分...等)

我试过了:

let myArray = trucks.boxes

let searchArray = myArray.flatMap {
  $0.items
     .filter {$0.name == "apple"}
}

但我得到的是 items 数组。

【问题讨论】:

  • 按照定义,trucks 是一个盒子数组。怎么可能拥有.boxes 属性? $0.items 也是如此。请务必包含您正在使用的类/结构的定义。

标签: ios arrays swift filter


【解决方案1】:

我不确定您的类/结构的结构是什么,但根据以下定义,结果将包含具有名称为“apple”的项目的框

struct Truck {
    let boxes: [Box]
}

struct Box {
    let items: [Item]
}

struct Item {
    let name: String
}

let truck = Truck(boxes: [
    Box(items: [Item(name: "Banana")]),
    Box(items: [Item(name: "Apple"), Item(name: "Pear")])
])

let searchArray = truck.boxes
    .filter { box in
        box.items.contains(where: { item in item.name.lowercased() == "apple" })
    }

【讨论】:

  • box.items.filter { item in item.name.lowercased() == "apple"}.count > 0 必须更好地表达为box.items.contains(where: { item in item.name.lowercased() == "apple"})
  • 这段代码也可以从一些换行和缩进中受益,以打破那长长的嵌套括号行
  • @Alexander 谢谢,我同意contains 是一个更好的选择。我会用缩进的版本更新
猜你喜欢
  • 1970-01-01
  • 2015-12-30
  • 2012-03-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-09
相关资源
最近更新 更多