New Array from Index Range Swift

前端 未结 5 1652
傲寒
傲寒 2020-12-02 07:41

How can I do something like this? Take the first n elements from an array:

newNumbers = numbers[0..n]

Currently getting the following error

5条回答
  •  我在风中等你
    2020-12-02 08:13

    subscript

    extension Array where Element : Equatable {
      public subscript(safe bounds: Range) -> ArraySlice {
        if bounds.lowerBound > count { return [] }
        let lower = Swift.max(0, bounds.lowerBound)
        let upper = Swift.max(0, Swift.min(count, bounds.upperBound))
        return self[lower.. ArraySlice {
        let lower = lower ?? 0
        let upper = upper ?? count
        if lower > upper { return [] }
        return self[safe: lower..

    returns a copy of this range clamped to the given limiting range.

    var arr = [1, 2, 3]
        
    arr[safe: 0..<1]    // returns [1]  assert(arr[safe: 0..<1] == [1])
    arr[safe: 2..<100]  // returns [3]  assert(arr[safe: 2..<100] == [3])
    arr[safe: -100..<0] // returns []   assert(arr[safe: -100..<0] == [])
    
    arr[safe: 0, 1]     // returns [1]  assert(arr[safe: 0, 1] == [1])
    arr[safe: 2, 100]   // returns [3]  assert(arr[safe: 2, 100] == [3])
    arr[safe: -100, 0]  // returns []   assert(arr[safe: -100, 0] == [])
    

提交回复
热议问题