首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift -对Int数组使用stride

Swift -对Int数组使用stride
EN

Stack Overflow用户
提问于 2018-12-10 22:50:47
回答 3查看 2.8K关注 0票数 2

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

代码语言:javascript
复制
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)
}
EN

回答 3

Stack Overflow用户

发布于 2018-12-11 00:04:57

看起来你想用stride ..。

代码语言:javascript
复制
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)
}

打印

代码语言:javascript
复制
summ of arr[0..<4] 10
summ of arr[4..<8] 26
summ of arr[8..<12] 42
summ of arr[12..<13] 13
票数 1
EN

Stack Overflow用户

发布于 2018-12-10 22:58:25

您可以首先将数组拆分为块,然后将这些块相加:

代码语言:javascript
复制
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语句:

代码语言:javascript
复制
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, +) }
}
票数 0
EN

Stack Overflow用户

发布于 2018-12-10 23:43:17

这是一个非常基本的解决方案,可能不是很优雅。首先计算并打印每组4个元素的总和

代码语言:javascript
复制
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)
}

然后计算剩余元素的总和

代码语言:javascript
复制
sum = 0
for n in count..<numbers.count {
   sum += numbers[n]
}
print(sum)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53708126

复制
相关文章

相似问题

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