【问题标题】:Define equality/ordering implicitly for collections为集合隐式定义相等/排序
【发布时间】:2017-05-17 06:40:21
【问题描述】:

是否可以在 Scala 中为集合定义我自己的相等或排序概念?在这种情况下,覆盖 equalshashCode 不起作用,因为我希望拥有多个实例。

我的想法大致如下:(忽略这段代码的无效性)

implicit val customEq1(x: Int, y: Int) = x % 8 == y % 8
val customEq2(x: Int, y: Int) = x.toString == y.toString.take(2)

val union = Set(1,15,3).union(Set(3,7,8)) // => Set(1,3,8)

我认为相等/排序是一个类型类,但函数如 e.g. diffunionintersect 似乎没有提供任何此类功能。

【问题讨论】:

标签: scala collections equality implicit


【解决方案1】:

如果您有多个不同的实现进行比较,您可以为每个实现创建一个具有适当覆盖的类,然后通过隐式转换强制集合的类型,如下所示:

class MyCompInt { overrides... }
val union = Set[MyCompInt](1, 15, 3).union(...)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    • 2018-06-04
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    相关资源
    最近更新 更多