Swift 4:更改数组长度的最佳方法?

时间:2018-07-30 09:56:37

标签: swift

import Foundation

public
class Example001 {
    public
    func changeLength(of arrayOfInt: [Int], to newLength: Int) -> [Int] {
        let oldLength = arrayOfInt.count
        if oldLength == newLength {
            return arrayOfInt
        }

        if oldLength < newLength {
            var newArrayOfInt = [Int]()
            newArrayOfInt.append(contentsOf: arrayOfInt)
            for _ in oldLength ..< newLength {
                newArrayOfInt.append(0)
            }
            return newArrayOfInt
        }

        return Array(arrayOfInt.prefix(newLength))
    }
}

此方法changeLength()返回一个基于现有数组和新长度的数组。

无论新数组的长度小于,大于或等于原始数组,代码都可以正常工作。

但是我想知道在Swift 4中是否有更好的方法可以使它更紧凑。

1 个答案:

答案 0 :(得分:1)

一个更快的版本是:

func changeLength(of arrayOfInt: [Int], to newLength: Int) -> [Int] {
    if newLength < arrayOfInt.count {
        return Array(arrayOfInt.prefix(newLength))
    } else if newLength == arrayOfInt.count {
        return arrayOfInt
    } else {
        return arrayOfInt + Array(repeating: 0, count: newLength - arrayOfInt.count)
    }
}

或者,如果您想超级简洁:

func changeLength(of arrayOfInt: [Int], to newLength: Int) -> [Int] {
    return Array(arrayOfInt.prefix(newLength)) + Array(repeating: 0, count: max(0, newLength - arrayOfInt.count))
}