arrays - 如何快速对 Range<Index> 的数组进行排序?

标签 arrays swift sorting range

我有一组范围索引,这些索引是在一个长字符串中搜索多个短字符串的所有位置而得到的。我需要这些排序范围的数组,从较小的索引到较大的索引。如何进行范围排序?

最佳答案

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/

相关文章:

javascript - 在 JavaScript 中将事物存储在对象与数组中

iphone - cocoa iPhone 递归数组

arrays - 如果不可能,Ruby 哈希挖掘或返回 nil

java - 重复该程序,直到用户在数组中键入 none

javascript - Angular 列排序点击标题

arrays - Swift 中下标的模糊使用

ios - UITableViewAutomaticDimension 不适用于自定义表格单元格

ios - ios9.3上xcode 7.3中的路径似乎没有有效的已编译 Storyboard

javascript - 如何对包含数组的javascript对象进行排序?

sorting - 用于对表进行排序的 Google Sheets 脚本给出错误 "Cell reference out of range"