给定一个包含任意数量对象的数组,你怎么能干净安全地从它中获取前三个元素来存储在一个新数组中?如果数组不包含至少3个元素,则不应触发运行时异常,而应仅将数组中的元素数添加到新数组中。
我认为这可能有用,但它不会在Xcode 7中编译,如果确实如此,我无法想象它会按照我的意愿安全行事:
let arr1 = [1, 2, 3, 4, 5]
let arr2 = arr1[0..<3]
//Expected: arr == [1, 2, 3]
let arr1 = [1, 2]
let arr2 = arr1[0..<3]
//Expected: arr2 == [1, 2]
let arr1 = [Int]()
let arr2 = arr1[0..<3]
//Expected: arr2 == []
当然,总是可以做这样的事情,或者你可以使用for循环,但它们都不干净简洁。我希望找到一种更快捷的方式。
let arr1 = [1, 2]
var arr2 = [Int]()
if photos.count > 0 {
arr2.append(arr1[0])
}
if photos.count > 1 {
arr2.append(arr1[1])
}
if photos.count > 2 {
arr2.append(arr1[2])
}
答案 0 :(得分:0)
另一种方法是使用函数......
import Swift
let arr1 = [1, 2, 3, 4, 5]
let arr2 = [1, 2]
let arr3 = [Int]()
func firstThree(data: [Int]) -> [Int] {
var results = [Int]()
for (index, number) in data.enumerate() {
if (index < 3) {
results.append(number)
}
}
return results
}
print(firstThree(arr1))
print(firstThree(arr2))
print(firstThree(arr3))
打印:
[1, 2, 3]
[1, 2]
[]
稍微好一点的方法是使用泛型并获得N个项目:
func genericFirstItems<T>(array: [T], numberOfItems: Int) -> [T] {
var results = [T]()
for (index, item) in array.enumerate() {
if index < numberOfItems {
results.append(item)
}
}
return results
}
print(genericFirstItems(arr1, numberOfItems: 3))
print(genericFirstItems(arr2, numberOfItems: 3))
print(genericFirstItems(arr3, numberOfItems: 3))
这具有相同的输出。
[1, 2, 3]
[1, 2]
[]