我想把数字相加,然后每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)
}发布于 2018-12-11 00:04:57
看起来你想用stride ..。
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发布于 2018-12-10 22:58:25
您可以首先将数组拆分为块,然后将这些块相加:
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, +) }
}发布于 2018-12-10 23:43:17
这是一个非常基本的解决方案,可能不是很优雅。首先计算并打印每组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)https://stackoverflow.com/questions/53708126
复制相似问题