如果存在,则将数组中的前几个元素存储在另一个数组中

时间:2015-10-10 03:11:22

标签: arrays swift

给定一个包含任意数量对象的数组,你怎么能干净安全地从它中获取前三个元素来存储在一个新数组中?如果数组不包含至少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])
}

1 个答案:

答案 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]
[]