swift - Swift 生成奇数数组问题
问题描述
我们给出了一个任务来创建一个 swift 函数来为给定数量的元素生成并返回一个奇数数组。
如果元素为 generate(5),则输出将为 [1,3,5,7,9]
对于上述任务,我们返回了下面不起作用的代码 -
import Foundation
func generate(len: Int) -> [Int] {
let count = len.count - 1
var oddArray = [Int]()
for i in 0 ... count{
let val = len[i] % 2
if val != 0 {
oddArray.append(len[i])
}
}
return Array[oddArray]
}
let stdout = ProcessInfo.processInfo.environment["OUTPUT_PATH"]!
FileManager.default.createFile(atPath: stdout, contents: nil, attributes: nil)
let fileHandle = FileHandle(forWritingAtPath: stdout)!
guard let len = Int((readLine()?.trimmingCharacters(in: .whitespacesAndNewlines))!)
else { fatalError("Bad input") }
let result = generate(len: len)
fileHandle.write(result.map{ String($0) }.joined(separator: "\n").data(using: .utf8)!)
fileHandle.write("\n".data(using: .utf8)!)
我们收到错误 -
solution.swift:5:17:错误:'Int' 类型的值没有成员'count' 让 count = len.count - 1
solution.swift:13:12:错误:实例成员 '下标' 不能用于类型 'Array<_>' 返回 Array[oddArray]
解决方案
您可以使用stride(from:to:by:)
创建奇数序列并将Array()
其转换为数组:
func generate(len: Int) -> [Int] {
guard len > 0 else { return [] }
return Array(stride(from: 1, to: len * 2, by: 2))
}
例子:
print(generate(len: 4))
[1, 3, 5, 7]
print(generate(len: 7))
[1, 3, 5, 7, 9, 11, 13]
推荐阅读
- c++ - 在模板参数列表中前向声明类型名
- javascript - 如何使用 babel-standalone 转译使用 spread/rest 运算符的 ES6 javascript?
- php - 在 XAMPP 上配置虚拟主机后找不到 URL
- node.js - 当用户输入错误的电子邮件时,为什么事务已经回滚失败
- excel - for 和 for 每个循环的问题
- xcode - 无法在 MacOS10.15 上构建包含 Fabric 的项目
- matlab - 无法从表中创建数组
- mysql - 找到大于 0 的 MIN 值,也没有负值
- sql - 在 postgres 中加入性能
- sql - 使用另一个表中的变量循环 SQL 查询