2015-10-20 3 views
1

У меня есть массив индексов диапазона, полученный в результате поиска всех позиций нескольких коротких строк в одной длинной строке. Мне нужен массив этих отсортированных диапазонов от меньшего индекса до более крупного. Как я могу сортировать диапазоны?Как отсортировать массив Range <Index> в swift?

+0

использовать функцию сортировки по массиву –

+0

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html –

ответ

3

Swift 2(оригинальный ответ)

Вы можете использовать .startIndex свойство каждого диапазона для сортировки диапазонов.

Пример:

let words = "Hello world" 

let range1 = words.rangeOfString("world")! 
let range2 = words.rangeOfString("Hello")! 
let range3 = words.rangeOfString("o w")! 

let ranges = [range1, range2, range3] // ["6..<11", "0..<5", "4..<7"] 

let sortedRanges = ranges.sort { $0.startIndex < $1.startIndex } 

sortedRanges // ["0..<5", "4..<7", "6..<11"] 

Свифта 3

То же самое, но с использованием вместо .lowerBound.startIndex:

if let range1 = words.range(of: "world"), 
     range2 = words.range(of: "Hello"), 
     range3 = words.range(of: "o w") { 
    let ranges = [range1, range2, range3] 
    let sortedRanges = ranges.sorted { $0.lowerBound < $1.lowerBound } 
    sortedRanges // [{lowerBound 0, upperBound 5}, {lowerBound 4, upperBound 7}, {lowerBound 6, upperBound 11}] 
} 

Также отметим, что sort теперь sorted.

+1

Спасибо! Хороший пример, ясный и полезный! – VYT

Смежные вопросы