首页 > 解决方案 > 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]

标签: swift

解决方案


您可以使用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]

推荐阅读