【问题标题】:Swift Generic Type Equatable by sorting arraySwift Generic Type Equatable 通过对数组进行排序
【发布时间】:2019-06-03 09:51:01
【问题描述】:

我正在尝试使我的通用 CustomSet 符合 Equatable,但是当我尝试在 Equatable func 中对列表数组进行排序时出现以下错误:

对成员'

我认为问题在于编译器在比较排序时没有关于值类型的信息,但我不确定如何告诉它它需要什么。这甚至可以对泛型类型进行吗?

如果list 包含完全相同的值,则目标是说CustomSet 等于。

struct CustomSet<T : Equatable> {
    var list: [T]
    init(_ list: [T]){
        self.list = list
    }
}

extension CustomSet : Equatable {
    static func == (lhs: CustomSet, rhs: CustomSet) -> Bool {
        return lhs.list.count == rhs.list.count && lhs.list.sorted(by: <) == rhs.list.sorted(by: <)
    }
}

【问题讨论】:

    标签: swift generics equality


    【解决方案1】:

    您需要将泛型类型参数限制为Comparable,以便能够对list 的元素使用&lt; 运算符,从而对list 进行排序。

    struct CustomSet<T : Comparable> {
        var list: [T]
        init(_ list: [T]){
            self.list = list
        }
    }
    

    【讨论】:

    • 这样想:Equatable 让您判断两个对象是否相等。 Comparable 可让您比较两个对象以查看哪个更大。要进行排序,您需要能够比较对象。
    猜你喜欢
    • 2017-08-20
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    相关资源
    最近更新 更多