arrays - Swift:确定自定义对象数组是否包含特定字符串
问题描述
我有一个名为 carArray 的数组,它是一个汽车数组。
如何编写函数来确定数组是否包含特定模型?例如,如果用户输入“BMW”,我如何确定它是否在数组中?每次发生这种情况时,我都试图通过编写一个 for 循环来遍历整个数组来避免回答这个问题。
struct Car {
var make: String?
var model: String?
var year: Double?
}
var carArray: [Car] = []
carArray.append(Car(make: "Audi", model: "S5", year: 2015))
carArray.append(Car(make: "BMW", model: "X3", year: 2016))
carArray.append(Car(make: "Honda", model: "Accord", year: 2018))
解决方案
添加这样的东西
func contains(make: String) -> Bool {
carArray.compactMap(\.make).contains(make)
} // returns true in your case for "BMW"
这有两个部分。首先,我String?
通过映射生成键路径将 Car 对象数组映射到一个数组。因为这可能有 nil 值,所以我compactMap
用来删除 nil 值。
如果您要经常这样做并且不希望每次都进行映射和检查的开销,那么请创建一些东西来存储您的汽车。像这样的东西:
struct Car {
var make: String?
var model: String?
var year: Double?
}
struct CarStore {
private(set) var storage: [Car] = .init()
private var makes: Set<String> = .init()
mutating func add(car: Car) {
storage.append(car)
car.make.map { makes.insert($0) } // map to run the closure only if make is not nil
}
func contains(make: String) -> Bool {
makes.contains(make)
}
}
var store = CarStore()
store.add(car: Car(make: "Audi", model: "S5", year: 2015))
store.add(car: Car(make: "BMW", model: "X3", year: 2016))
store.add(car: Car(make: "Honda", model: "Accord", year: 2018))
store.contains(make: "BMW") // -> true
推荐阅读
- html - 当加载器到达表单顶部时,表单位置正在改变
- android - 使用服务时如何隐藏工具栏?
- python - Service Odoo 10 - 服务器 odoo 无法正常启动
- azure - Azure - 无法将 Microsoft 帐户添加到 Azure 订阅
- django - 从 django 模型中的单个 ImageField 保存具有不同尺寸的多个图像
- python - 我可以使用列表数据集进行深度学习训练吗?
- mysql - 如何从使用 UNION 的表连接中获取 MAX 日期?
- android - 如何实时更改图像的像素颜色
- python - python: 这是 python 故障吗?如果 i 中的 STR 或 STR 有问题
- oracle - SQL Developer 的自动跟踪中 tkprof 和 v$statname 的等效列是什么?