在swift

时间:2017-02-27 00:12:59

标签: swift

所以我创建了一个名为duplicate的函数,它基本上可以使用任何类型,并且可以多次复制它。它在快速的操场上完美无瑕地工作。

我在这里找出是否有不同的/更简单的方法来做我正在做的事情。我问的原因是因为我在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
}

2 个答案:

答案 0 :(得分:1)

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
}

答案 1 :(得分:1)

数组初始化方法

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并附加

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

while循环并附加

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