Swift -使用stride和Int数组

z9ju0rcb  于 5个月前  发布在  Swift
关注(0)|答案(4)|浏览(72)

我想把数字加在一起,每4个元素打印一次,但是我不能用stride函数,如果我用错了方法,请解释一个更好的方法。

var numbers = [1,2,3,4,5,6,7,8,9,10,11,12,13]

func addNumbersByStride(){
    var output = Stride...
    //first output = 1+2+3+4 = 10
    //second output = 5+6+7+8 = 26 and so on
    print(output)
}

字符串

kuuvgm7e

kuuvgm7e1#

似乎你想用大步…

let arr = [1,2,3,4,5,6,7,8,9,10,11,12,13]

let by = 4
let i = stride(from: arr.startIndex, to: arr.endIndex, by: by)
var j = i.makeIterator()
while let n = j.next() {
    let e = min(n.advanced(by: by), arr.endIndex)
    let sum = arr[n..<e].reduce(0, +)
    print("summ of arr[\(n)..<\(e)]", sum)
}

字符串
指纹

summ of arr[0..<4] 10
summ of arr[4..<8] 26
summ of arr[8..<12] 42
summ of arr[12..<13] 13

cyvaqqii

cyvaqqii2#

这是一个相当基本的解决方案,也许不是那么优雅。首先计算并打印每组4个元素的总和

var sum = 0
var count = 0
for n in stride(from: 4, to: numbers.count, by: 4) {
    sum = 0
    for i in n-4..<n {
        sum += numbers[i]
    }
    count = n
    print(sum)
}

字符串
然后计算剩余元素的和

sum = 0
for n in count..<numbers.count {
   sum += numbers[n]
}
print(sum)

webghufk

webghufk3#

你可以先把数组拆分成块,然后把块加起来:

extension Array {
    // split array into chunks of n
    func chunked(into size: Int) -> [[Element]] {
        return stride(from: 0, to: count, by: size).map {
            Array(self[$0 ..< Swift.min($0 + size, count)])
        }
    }
}

// add each chunk up:
let results = numbers.chunked(into: 4).map { $0.reduce(0, +) }

字符串
如果你想在原始数组的长度不能被4整除的情况下丢弃最后一个和,你可以添加一个if语句:

let results: [Int]
if numbers.count % 4 != 0 {
    results = Array(numbers.chunked(into: 4).map { $0.reduce(0, +) }.dropLast())
} else {
    results = numbers.chunked(into: 4).map { $0.reduce(0, +) }
}

z2acfund

z2acfund4#

这可以帮助你:

let from:Int = 0
let to: Int = 10
let by: Int = 3

for value in stride(from: from, to: to, by: by) {
    print(getSum(value))
}

func getSum(_ startPoint: Int) -> [String : Any] {
    let end: Int = startPoint == 0 ? by : startPoint + by > to ? to + 1 : startPoint + by
    let range: Range = startPoint..<end
    return ["array":Array(range), "sum":Array(range).reduce(0, +)]
}

字符串

相关问题