Home > Mobile >  Find previous and next Range in an array of NSRange
Find previous and next Range in an array of NSRange

Time:09-29

Array of NSRange: [{0, 31}, {32, 29}, {62, 10}, {73, 15}, {89, 0}, {90, 14}, {105, 22}, {128, 26}, {155, 15}, {171, 17}, {189, 22}, {212, 15}, {228, 18}, {247, 3}, {251, 2}, {254, 1}, {256, 0}, {257, 24}, {282, 22}]

myRange: {105, 148}

I have a range that it is not included necessarily in an array like "myRange" I want to find the available range in the array that it is just before "myRange" and the available range in the array that it is just after "myRange"

Expected : previous NSRange {90, 14} and Next NSRange {254, 1}

Note: The upper bound of the range {105, 148} is 105 148 = 253, so I want next range lower bound to be greater than 253

CodePudding user response:

To find the previous range you can use last(where:) and to find the next range you can use first(where:) on your NSRange array like this.

if let previous = nsRangeArray.last(where: { $0.upperBound < myRange.lowerBound }) {
    print(previous)
}
if let next = nsRangeArray.first(where: { $0.location > myRange.upperBound }) {
    print(next)
}

CodePudding user response:

let array : [NSRange] = [NSMakeRange(0, 31), NSMakeRange(32, 29), NSMakeRange(62, 10), NSMakeRange(73, 15), NSMakeRange(89, 0), NSMakeRange(90, 14), NSMakeRange(105, 22), NSMakeRange(128, 26), NSMakeRange(155, 15), NSMakeRange(171, 17), NSMakeRange(189, 22), NSMakeRange(212, 15), NSMakeRange(228, 18), NSMakeRange(247, 3), NSMakeRange(251, 2), NSMakeRange(254, 1), NSMakeRange(256, 0), NSMakeRange(257, 24), NSMakeRange(282, 22)]


let myRange = NSMakeRange(105,148)

array.filter{$0.lowerBound > myRange.upperBound}.first
array.filter{$0.upperBound < myRange.lowerBound}.last
  • Related