快速通用类型通过排序数组可相等

时间:2019-01-08 16:51:48

标签: swift generics equality

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

  

对成员'<'

的含糊引用

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

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

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: <)
    }
}

1 个答案:

答案 0 :(得分:2)

您需要将通用类型参数限制为Comparable,才能在<的元素上使用list运算符,从而对list进行排序。

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