2017-01-03 39 views
0

是否可以定义我自己的平等概念或对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) 

我想像的平等/排序是一个类型类,但像例如功能diffunion,intersect似乎没有提供任何此类功能。

+1

的可能的复制[我怎样才能定义一个自定义的相等操作,将被不可变的设置比较方法](http://stackoverflow.com/questions/7681183/how-can-i-define-a-custom-equality-operation-that-will - 被使用的不可变集) – DeadNight

+0

对“重复”问题的回答表明,重写“equals”,这不是我想要的,正如我的问题所解释的。 – TomTom

回答

-1

如果您有比较多不同的实现,你可以为每个与适当的替代类,然后强制设定与隐式转换的类型,像这样:

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