swift 数组中某些元素的和

qv7cva1a  于 2023-03-28  发布在  Swift
关注(0)|答案(3)|浏览(219)

我想知道如何得到数组中某些元素的总和?例如,下面是我的数组,我只需要对前5个元素求和:

var num = [31, 28, 31, 30, 30, 31, 30, 31, 30, 29, 31, 31]

我试着用range来做,但没有成功:

for I in 0..<num[5] {
  .....
}
qnzebej0

qnzebej01#

for I in 0..<nums[5]并不像你期望的那样工作,因为nums[5]说的是“nums的第五个(0索引)元素”。所以就像你写的那样:

for i in 0..<31 { ... }

这不是你想要的。
要迭代num数组的前5个元素,首先需要将其切片。这里有两种方法:
1.请求5个元素的前缀:

for n in nums.prefix(5) { print(i) }

1.从开始到第5个元素(索引4处)进行切片:

for n in nums[...4] { print(i) }

这并不健壮,因为如果数组不够长,它就会崩溃,不像基于prefix的方法(它只提取尽可能多的可用元素,最多5个)。
这两个答案都将打印前5个数字(31,28,31,30,30)。
要对它们求和,您可以使用循环手动执行:

var sum = 0

for n in nums.prefix(5) { sum += n }

print(sum)

或者更简洁地使用reduce

let sum = nums.prefix(5).reduce(0, +)
wljmcqd8

wljmcqd82#

你试过用子数组吗?类似

for I in num[0...4] {
  //... your code here
}

也为您可以使用的总和。减少

let total = num[0...4].reduce(0, +)
dsekswqp

dsekswqp3#

var sum = 0
for i in 0..<5 {
    sum += num[i]
}

print(sum) // Output: 150

编辑,泛型函数方式

func sumOfNElements<T: Numeric>(_ array: [T], _ n: Int) -> T {
    let endIndex = min(n, array.count)
    var sum: T = 0
    for i in 0..<endIndex {
        sum += array[i]
    }
    return sum
}

这个函数接受两个参数-一个符合Numeric协议的任何类型T的数组(即支持加法和乘法等基本数值运算的类型),以及一个整数n,它指定要求和的元素数量。
该函数首先计算要求和的最后一个元素的索引(它是n和数组大小的最小值)。然后将变量sum初始化为零,并迭代数组直到计算出的endIndex,将每个元素添加到sum。
最后,该函数返回累加和。
下面是一个如何使用此函数对整数数组的前3个元素求和的示例:

let numbers = [1, 2, 3, 4, 5]
let sum = sumOfNElements(numbers, 3)
print(sum) // Output: 6

注意,如果n的值大于数组的大小,则该函数将仅对数组中的所有元素求和。

相关问题