函数是从另一个数组中筛选出相等年份的索引。
我正在寻找代码的更短解决方案:
let years = (2015...2025).map { $0 }
var chosenYears = [2015, 2019, 2016] (example)
此功能可以满足我的需求,但是我正在寻找东西(外观functional-programming
更多)。
func selectChoseYears() {
for (index, year) in years.enumerated() {
for chosenYear in chosenYears {
if year == chosenYear { view?.selectCell(at: index) }
}
}
}
我尝试了一些解决方案,但它们看起来丑陋且比这更长。
谢谢。
答案 0 :(得分:3)
有许多可能的解决方案,例如:
let yearIndices = chosenYears.compactMap { years.index(of: $0) }
for yearIndex in yearIndices {
view?.selectCell(at: yearIndex)
}
或者只是
for (index, year) in years.enumerated() where chosenYears.contains(year) {
view?.selectCell(at: index)
}
答案 1 :(得分:2)
您可以直接过滤indices
years.indices.filter{ chosenYears.contains(years[$0]) }.forEach { view?.selectCell(at: $0) }
我完全同意苏尔坦的评论。但是,我会用 更有效率
代替更加可读和更简单答案 2 :(得分:1)
您可以使用以下函数查找任何Equatable
元素的索引
func indexes<T: Equatable>(of chosen: [T], in all: [T]) -> [Int] {
return all.enumerated().filter { chosen.contains($0.element) }.map { $0.offset }
}
indexes(of: chosenYears, in: years)
答案 3 :(得分:0)
尝试:
scoped-css-from-a-vue-file.03371a6565c9f56951dd.css // (172 bytes)
main-css-bundle-from-sass-files.af5152091d41a56d9bdd.css // (303 KiB)
答案 4 :(得分:0)
您可以尝试如下操作:
self.tableView.visibleCells
.flatMap { $0 as? MyCell }
.forEach { $0.updateView(isSelected: chosenYears.contains($0.viewModel?.year) }
尽管它要求单元格存储其表示年份的视图模型,但您需要实现updateView(isSelected:)