arrays - Swift 中每隔一个奇数数组

标签 arrays swift math

我有一个名为“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/

相关文章:

r - 在 R 中拟合累积分布后,根据拟合参数创建正态分布

objective-c - 将监听器添加到 firestore 时如何绕过缓存

java - 在不计算垂直 vector 的情况下获取二维三角形中点的距离?

c# - 如何检查列表是否包含字节数组?

c - 我应该使用 2 个原型(prototype),还是只使用 1 个?

ios - 遵守 Swift 协议(protocol)

ios - 当单元格可见时在轮播中播放视频

java - 我们如何计算双向链表(循环列表)中的元素,其中我们不知道初始状态,也不知道头/尾在哪里‽

JavaScript split() 方法导致未定义

java - 某些输入值的 ArrayIndexOutOfBounds 异常