Swift 4 Conform Comparable 协议(protocol)和排序方法问题

标签 swift sorting

我编写了符合 Comparable 协议(protocol)的 Struct。

struct Record: Comparable {
    static func < (lhs: Record, rhs: Record) -> Bool {
        if lhs.wins == rhs.wins {
            return lhs.losses > rhs.losses
        }
        return lhs.wins < rhs.wins
    }

    var wins: Int
    var losses: Int

    init(wins: Int, losses: Int) {
        self.wins = wins
        self.losses = losses
    }
}

var a1 = Record(wins: 3, losses: 8)
var b1 = Record(wins: 3, losses: 9)
var c1 = Record(wins: 4, losses: 7)

var records = [a1, b1, c1]

records.reverse()
print(records)

使用 > < == 一切正常,也可以排序。但是如果我对记录数组进行反向排序方法,它会给我如下输出:

[__lldb_expr_48.Record(wins: 4, losses: 7), __lldb_expr_48.Record(wins: 3, losses: 9), __lldb_expr_48.Record(wins: 3, losses: 8)]

最高的胜利应该首先出现,其次是较少的胜利,但如果胜利相等,那么较少的损失应该先于更多的损失。我在这里做错了什么或遗漏了什么吗?我仍在快速学习,所以有可能。

最佳答案

要以相反的排序顺序排列一组东西,你可以只用 sort通过 > :

records.sort(by: >)

reverse只会反转数组,而不对其进行排序。

关于Swift 4 Conform Comparable 协议(protocol)和排序方法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54762355/

相关文章:

swift - 如何在 Apple Watch 上绘制自定义图形?

ios - 将 UITableView 与 Storyboard一起使用,但使用单独的数据源

xcode - 找不到 SwiftXCTest

java - 完成链表排序后,我不确定如何跳出循环

linux - Linux 中的快速、半准确排序

ios - 快速从 DatePicker 获取日期/时间

ios - 如何在 UITableViewCell 中处理 AVPlayer?

c++ - 归并排序中选择中间元素

java - 将对象元素按有序位置插入数组,而不使用 Java 中的排序算法

Javafx 表列使用比较器排序不起作用