我有一个名为“odd”的函数,它返回一个包含范围内的奇数数组。下面给出。
func odd(from start: Int, to end: Int) -> [Int] {
let list = [Int](stride(from: start, to: end+1, by: 2))
return list
}
我正在尝试创建一个函数,该函数返回每隔一个奇数而不是每个奇数的数组。这个功能也应该是包容性的。
func alternatingOdd(from start: Int, to end: Int) -> [Int] {
var list = odd(from: start, to: end)
// ... black magic trickery turns removes every other number from list...
return list
}
像这样调用此函数:alternatingOdd(from: 1, to: 25)
将返回一个数组 [1, 5, 9, 13, 17, 21, 25]
。
本质上,我是在问:如何从数组中彻底删除所有其他元素?
编辑:“奇数”函数并不总是根据用户输入返回奇数数组。它仅返回一个范围内递增 2 的值数组。
我如何对其进行防弹并确保它始终只返回奇数?也就是说,数组中的每个元素不能被二整除。
最佳答案
与其使用 stride
创建数组,不如使用模运算符 filter
创建数组
odd
函数保留奇数
func odd(from start: Int, to end: Int) -> [Int] {
return (start...end).filter{$0 % 2 == 1}
}
alternatingOdd
函数使用compactMap
来过滤索引
func alternatingOdd(from start: Int, to end: Int) -> [Int] {
let list = odd(from: start, to: end)
return list.indices.compactMap{$0 % 2 == 0 ? list[$0] : nil }
}
关于arrays - Swift 中每隔一个奇数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55137240/