arrays - Swift过滤数组中的自定义对象
问题描述
我想知道是否有任何有效的方法来过滤一组自定义对象,比如我下面的那个。我有一个 Author 类和一个 Book 类,它可以有多个具有不同属性的作者,例如书籍状态的枚举、作者所写书籍的评论以及书籍状态发生变化的数组。我想按不同的状态、作者和日期进行过滤,所有 4 个参数都是可选的。
class Author : Equatable {
let name : String
let id = UUID()
}
class Book : Equatable {
let date = Date()
var comments : [Comment] = []
var writtenBy : [Author] = []
var state : State = .available {
didSet {
updateState(timestamp: Date())
}
}
}
enum State : String, CaseIterable {
case available
case unavailable
case missing
}
class CollectionOfBooks {
private static var arrayOfBooks : [Book] = []
static func getAllBooks(state: State?, authorId: UUID?, fromDate: Date?, toDate : Date?) -> [Book] {
let filteredArray = arrayOfBooks.filter({$0.state == state})
filteredArray = arrayOfBooks.filter....
filteredArray = arrayOfBooks.filter....
filteredArray = arrayOfBooks.filter....
return filtered array
// what is the most efficient way of sorting the my array?
//At the moment i only know how to achieve this by filtering one parameter at a time.
}
}
解决方案
您可以将所有条件连接到一个条件中。
let filteredArray = arrayOfBooks.filter({$0.state == state && $0.name.contains("asdf")})
推荐阅读
- php - Laravel:在通知中添加收件人姓名
- c# - c# 模态对话框中的棱镜区域
- r - 在 R 中使用 barplot 时出错:宽度/2 错误:二元运算符的非数字参数
- arrays - 返回 SQL Server 中的基本 JSON 字符串数组
- r - 基于上一个时间段的用户 ID 的分组平均值
- excel - 如何创建一个自动滚动并循环回到开头的 Excel 宏?
- wordpress - Timber 中如何使用 wordpress 标准
- docker - nanoserver:“错误:在 Docker 中找不到模块 node.exe”
- mysql - MySql 查询由多列和多个计数组合在一起
- javascript - 在 for 循环中获取数据(不是索引)