首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找索引的简短解决方案

查找索引的简短解决方案
EN

Stack Overflow用户
提问于 2019-01-29 10:33:46
回答 5查看 108关注 0票数 0

函数在一个数组中从另一个数组中筛选相等年份的索引。

我正在寻找我的代码的更短的解决方案:

代码语言:javascript
复制
 let years = (2015...2025).map { $0 }
 var chosenYears = [2015, 2019, 2016] (example)

这个函数可以做我想做的事情,但是我正在寻找一些东西(更多的functional-programming外观)。

代码语言:javascript
复制
 func selectChoseYears() {
    for (index, year) in years.enumerated() {
        for chosenYear in chosenYears {
            if year == chosenYear { view?.selectCell(at: index) }
        }
    }
 }

我尝试了一些解决方案,但它们看起来很难看,而且比这个还要长。

谢谢你,

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-01-29 10:41:48

有许多可能的解决办法,例如:

代码语言:javascript
复制
let yearIndices = chosenYears.compactMap { years.index(of: $0) }
for yearIndex in yearIndices {
   view?.selectCell(at: yearIndex)
}

或者只是

代码语言:javascript
复制
for (index, year) in years.enumerated() where chosenYears.contains(year) {
    view?.selectCell(at: index)
}
票数 4
EN

Stack Overflow用户

发布于 2019-01-29 10:42:41

您可以直接过滤indices

代码语言:javascript
复制
years.indices.filter{ chosenYears.contains(years[$0]) }.forEach { view?.selectCell(at: $0) }

我完全同意苏森的评论。不过,我将用、更高效的替换更易读、更简单的

票数 2
EN

Stack Overflow用户

发布于 2019-01-29 10:54:26

您可以找到具有以下函数的任何Equatable元素的索引

-一般索引查找器

代码语言:javascript
复制
func indexes<T: Equatable>(of chosen: [T], in all: [T]) -> [Int] {
    return all.enumerated().filter { chosen.contains($0.element) }.map { $0.offset }
}

-使用:

代码语言:javascript
复制
indexes(of: chosenYears, in: years)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54419047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档