所以我创建了一个名为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
}
答案 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 }
}
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
}