在Swift中使用索引映射或减少

有一种方法获取数组的索引在map或reduce在Swift?我在Ruby中寻找类似each_with_index的东西。
func lunhCheck(number : String) -> Bool
{
    var odd = true;
    return reverse(number).map { String($0).toInt()! }.reduce(0) {
        odd = !odd
        return $0 + (odd ? ($1 == 9 ? 9 : ($1 * 2) % 9) : $1)
    }  % 10 == 0
}

lunhCheck("49927398716")
lunhCheck("49927398717")

我想摆脱奇变量above

您可以使用枚举将序列(Array,String等)转换为具有整数计数器和元素配对在一起的元组序列。那是:
let numbers = [7,8,9,10]
let indexAndNum: [String] = numbers.enumerate().map { (index,element) in
    return "\(index): \(element)"
}
print(indexAndNum)
// ["0: 7","1: 8","2: 9","3: 10"]

Link to enumerate definition

注意,这不同于获取集合枚举的索引返回一个整数计数器。这与数组的索引相同,但是对字符串或字典将不是非常有用。要获取实际的索引以及每个元素,您可以使用zip:

let actualIndexAndNum: [String] = zip(numbers.indices,numbers).map { "\($0): \($1)" }
print(actualIndexAndNum)
// ["0: 7","3: 10"]

当使用带有reduce的枚举序列时,您将无法分离元组中的索引和元素,因为您在方法签名中已经有accumulating / current元组。相反,你需要在你的reduce闭包的第二个参数上使用.0和.1:

let summedProducts = numbers.enumerate().reduce(0) { (accumulate,current) in
    return accumulate + current.0 * current.1
    //                          ^           ^
    //                        index      element
}
print(summedProducts)   // 56

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...