我有一组范围索引,这些索引是在一个长字符串中搜索多个短字符串的所有位置而得到的。我需要这些排序范围的数组,从较小的索引到较大的索引。如何进行范围排序?
最佳答案
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"]
swift 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
。
关于arrays - 如何快速对 Range<Index> 的数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33236453/