美文网首页君赏博客
关于数据进行排序小研究

关于数据进行排序小研究

作者: 君赏 | 来源:发表于2016-12-10 17:41 被阅读9次

最近遇到一个问题就是把城市按照首字母进行排序并且首字母排序进行依次排序。

我之前知道数组有排序的方法,但是没怎么用过,今天研究一下。

下面是一个数组要进行字母排序。

let oldTitleList = ["BCDA","ABCD","ADCB","ACDB","BDAC","DACB","CADB"]

我们利用系统的方法进行排序

官方的说明如下:

sorted(by:)

参数:areInIncreasingOrder

如果第一个参数应在第二个参数之前排序,则返回true否则是false。

当您要对不符合Comparable协议的元素集合进行排序时,请将predicate传递给此方法,当第一个元素在第二个元素之前排序时,该方法返回true。 结果数组的元素根据给定的predicate排序。

predicate必须是对元素的严格弱排序。 也就是说,对于任何元素a,b和c,必须满足以下条件:

  • areInIncreasingOrder(a,a)总是返回false
  • 如果areInIncreasingOrder(a,b)areInIncreasingOrder(b,c)都为true,那么areInIncreasingOrder(a,c)也为true
  • 两个元素是不可比较的,如果两者都不根据predicate在另一个之前排序。 如果a和b是不可比较的,并且b和c是不可比的,则a和c也是不可比的。

排序算法不稳定。 不稳定排序可以更改areInIncreasingOrder不建立顺序的元素的相对顺序。

在以下示例中,predicate为自定义HTTPResponse类型的数组提供了排序。 predicate在成功之前对错误进行排序,并按错误代码对错误响应进行排序。

enum HTTPResponse {
    case ok
    case error(Int)
}

let responses: [HTTPResponse] = [.error(500), .ok, .ok, .error(404), .error(403)]
let sortedResponses = responses.sorted {
    switch ($0, $1) {
    case let (.error(aCode), .error(bCode)):
        return aCode < bCode
    case (.ok, .ok): return false
    case (.error, .ok): return true
    case (.ok, .error): return false
    }
}
print(sortedResponses)
// Prints "[.error(403), .error(404), .error(500), .ok, .ok]"

您还可以使用此方法按降序顺序对符合“可比较”协议的元素进行排序。 要按降序对集合进行排序,请将greater-than运算符(>)作为areInIncreasingOrder参数传递。

let students: Set = ["Kofi", "Abena", "Peter", "Kweku", "Akosua"]
let descendingStudents = students.sorted(by: >)
print(descendingStudents)
// Prints "["Peter", "Kweku", "Kofi", "Akosua", "Abena"]"

调用相关的sorted()方法等效于调用此方法并传递小于操作符(<)作为谓词。

print(students.sorted())
// Prints "["Abena", "Akosua", "Kofi", "Kweku", "Peter"]"
print(students.sorted(by: <))
// Prints "["Abena", "Akosua", "Kofi", "Kweku", "Peter"]"
let sordArray = oldTitleList.sorted()

Log如下

  - 0 : "ABCD"
  - 1 : "ACDB"
  - 2 : "ADCB"
  - 3 : "BCDA"
  - 4 : "BDAC"
  - 5 : "CADB"
  - 6 : "DACB"

这是Swift数组Array排序的方法,以后仔细研究一下其他的排序。

相关文章

  • 关于数据进行排序小研究

    最近遇到一个问题就是把城市按照首字母进行排序并且首字母排序进行依次排序。 我之前知道数组有排序的方法,但是没怎么用...

  • 冒泡排序

    冒泡排序是把相邻的两个数据进行排序,比如把下面的数据按大小排序 先把1和4进行排序,1比4小,就不动,再把4和2比...

  • 用 Numbers 进行「排序」遇到的「小插曲」

    用 Numbers 进行「排序」遇到的「小插曲」 因业务需求,我需要把数据进行排序,在经过了上次对 Numbers...

  • 入门2

    透视表的排序问题 排序时用数据选项卡中的排序进行排序,不要在字段中排 自定义排序 对数据透视表进行数据筛选 数据透...

  • 排序

    排序 内部排序:全部数据可同时放入内存进行的排序。 外部排序:文件中数据太多,无法全部调入内存进行的排序。 插入...

  • 数据排序

    数据排序 为了方便查看数据,可以对数据进行排序 语法: 说明

  • 常用算法整理

    1、 对以下一组数据进行降序排序(冒泡排序)。 2、 对以下一组数据进行升序排序(选择排序)。 3、 快速排序算法...

  • 如何对表格数据排序以及按多列排序?

    对表格中的数据进行排序,是我们经常需要做的工作。数据排序可以按单列进行排序,也可按多列进行排序。 下面我们以实际例...

  • 排序算法总结

    排序算法 排序算法可以分为内部排序和外部排序 内部排序:数据记录在内存中进行排序。 外部排序:排序的数据很大,排序...

  • 算法和数据结构2.4堆排序

    堆排序利用了数据结构中的堆。关于堆的简单介绍 对如下数据进行排序 首先在堆中存储所有数据,并按照降序来建堆。(升序...

网友评论

    本文标题:关于数据进行排序小研究

    本文链接:https://www.haomeiwen.com/subject/jnlumttx.html