Get last 10 elements from an array: NSMakeRange

I need to get the last 10 elements or min of 10 and array.count. In objective-C, I did it like this:

Objective-C code:

NSRange endRange = NSMakeRange(sortedArray.count >= 10 ? sortedArray.count - 10 : 0, MIN(sortedArray.count, 10));
NSArray *lastElements= [sortedArray subarrayWithRange:endRange];

      

In Swift, I did this:

let endRange = NSMakeRange(values.count >= 10 ? values.count - 10 : 0, min(values.count , 10) )

      

But not sure how to get the array using this range in swift. Any help would be greatly appreciated. Thank.

+3


source to share


3 answers


You can use the array instance method suffix(_:)

. Note that using a suffix you don't need to check the number of arrays. This will take up to 10 elements from the end of your array.



let array = Array(1...100)   // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]

let lastTenElements = Array(array.suffix(10))   // [91, 92, 93, 94, 95, 96, 97, 98, 99, 100]

      

+7


source


You can get it by declaring Range :

let letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n"]

let desiredRange = letters.index(letters.endIndex, offsetBy: -10) ..< letters.endIndex

// ["e", "f", "g", "h", "i", "j", "k", "l", "m", "n"]
let lastTenLetters = (desiredRange.count > letters.count) ? letters : Array(letters[desiredRange])

      

Note that if the required range counter is greater than the count of the main array, the last ten elements must be an integer main array.



While I still agree that Leo's answer is correct for your case, I would like to mention that the good thing about this solution is that it is applicable for more than just the last element, to make it clear, consider that you want to get 10 elements after the first one (referencing an array letters

, the elements must be bk), by implementing your desired range you can achieve this as below:

let letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n"]

let desiredRange = letters.index(letters.startIndex, offsetBy: 1) ..< letters.index(letters.startIndex, offsetBy: 11)

// ["b", "c", "d", "e", "f", "g", "h", "i", "j", "k"]
let lastTenLetters = (desiredRange.count > letters.count) ? letters : Array(letters[desiredRange])

      

+1


source


var values: NSArray = [1,2,3,4,5,6,7,8,9,10,11]

    values = values.reversed() as NSArray

    let tenDigits = values.prefix(10)

    debugPrint(values.count >= 10 ? NSArray(array: (Array(tenDigits))) : min(values.count , 10))

      

0


source







All Articles