我想知道如何得到数组中某些元素的总和?例如,下面是我的数组,我只需要对前5个元素求和:
var num = [31, 28, 31, 30, 30, 31, 30, 31, 30, 29, 31, 31]
我试着用range来做,但没有成功:
for I in 0..<num[5] { ..... }
qnzebej01#
for I in 0..<nums[5]并不像你期望的那样工作,因为nums[5]说的是“nums的第五个(0索引)元素”。所以就像你写的那样:
for I in 0..<nums[5]
nums[5]
nums
for i in 0..<31 { ... }
这不是你想要的。要迭代num数组的前5个元素,首先需要将其切片。这里有两种方法:1.请求5个元素的前缀:
num
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)。要对它们求和,您可以使用循环手动执行:
prefix
var sum = 0 for n in nums.prefix(5) { sum += n } print(sum)
或者更简洁地使用reduce:
reduce
let sum = nums.prefix(5).reduce(0, +)
wljmcqd82#
你试过用子数组吗?类似
for I in num[0...4] { //... your code here }
也为您可以使用的总和。减少
let total = num[0...4].reduce(0, +)
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个元素求和的示例:
Numeric
T
let numbers = [1, 2, 3, 4, 5] let sum = sumOfNElements(numbers, 3) print(sum) // Output: 6
注意,如果n的值大于数组的大小,则该函数将仅对数组中的所有元素求和。
n
3条答案
按热度按时间qnzebej01#
for I in 0..<nums[5]
并不像你期望的那样工作,因为nums[5]
说的是“nums
的第五个(0索引)元素”。所以就像你写的那样:这不是你想要的。
要迭代
num
数组的前5个元素,首先需要将其切片。这里有两种方法:1.请求5个元素的前缀:
1.从开始到第5个元素(索引4处)进行切片:
这并不健壮,因为如果数组不够长,它就会崩溃,不像基于
prefix
的方法(它只提取尽可能多的可用元素,最多5个)。这两个答案都将打印前5个数字(31,28,31,30,30)。
要对它们求和,您可以使用循环手动执行:
或者更简洁地使用
reduce
:wljmcqd82#
你试过用子数组吗?类似
也为您可以使用的总和。减少
dsekswqp3#
编辑,泛型函数方式
这个函数接受两个参数-一个符合
Numeric
协议的任何类型T
的数组(即支持加法和乘法等基本数值运算的类型),以及一个整数n,它指定要求和的元素数量。该函数首先计算要求和的最后一个元素的索引(它是n和数组大小的最小值)。然后将变量sum初始化为零,并迭代数组直到计算出的endIndex,将每个元素添加到sum。
最后,该函数返回累加和。
下面是一个如何使用此函数对整数数组的前3个元素求和的示例:
注意,如果
n
的值大于数组的大小,则该函数将仅对数组中的所有元素求和。