在Swift中复制任何类型的函数



因此,我制作了一个称为重复的功能,该功能本质上是任何类型的,并重复了您想要多次的次数。它在Swift Playgrounds中完美无缺。

我在这里找出是否有不同/更简单的方法来做我正在做的事情。我问的原因是因为我正在TeamTreeHouse.com上迅速学习。据说此代码不起作用。因此,必须有更好的方法,而较少的代码或做我所做的完全相同的事情。这是我的代码。

func duplicate<T>(_ item: T,_ numberOfItems: Int) -> Array<T> {
    var items = numberOfItems
    var newArray: [T] = []
    while( items > 0){
        newArray.append(item)
        items = items - 1
    }
    return newArray
}

Array已经内置了,很难比这更短:

let arr1 = [Int](repeating: 0, count: 1000)
let arr2 = [String](repeating: "hello", count: 20)

如果要对元素进行一些自定义,请使用map

let arr3 = (0..<10).map { i -> String in
    return i % 2 == 0 ? "hello" : "world"
}

如果您仍然坚持编写自己的循环:

func duplicate<T>(_ item: T,_ numberOfItems: Int) -> [T] {
    guard numberOfItems > 0 else { return [T]() }
    var newArray = [T]()
    for _ in 0..<numberOfItems {
        newArray.append(item)
    }
    return newArray
}

数组init方法

func duplicate<T>(_ item: T,_ numberOfItems: Int) -> [T] {
    return [T](repeating: item, count: numberOfItems)
}

范围

func duplicate<T>(_ item: T,_ numberOfItems: Int) -> [T] {
    return (0..<numberOfItems).map { _ in item }
}

foreach and Append

范围
func duplicate<T>(_ item: T,_ numberOfItems: Int) -> [T] {
    var newArray = [T]()
    (0..<numberOfItems).forEach { _ in newArray.append(item) }
    return newArray 
}

循环和附加

func duplicate<T>(_ item: T,_ numberOfItems: Int) -> [T] {
    var numberOfItems = numberOfItems
    var newArray = [T]()
    while(numberOfItems > 0) {
        newArray.append(item)
        numberOfItems -= 1
    }
    return newArray
}

最新更新