相关疑难解决方法(0)

如何使用用户定义的相等性实现Set

这个问题关系到这一个:是否有可能创建一组类的类(意思是它的扩展Set特性)Scala中,其中使用的平等来定义包含关系是由用户,而不是被定义的==

测试这是否真的有效的一种方法是检查是否filter返回相同的集合类型.

// typeclass for equality
trait Equals[T] {
  def isEqual(t1: T, t2: T): Boolean
}

// an object representing plane coordinates
case class Coordinate(i: Int, j: Int)

// an equality saying that 2 coordinates are equal if they are on 
// the same horizontal line
implicit def horizontalEquality: Equals[Coordinate] = new Equals[Coordinate] {
   def isEqual(t1: Coordinate, t2: Coordinate) = t1.i == t2.i
}

// we create an EqualitySet[T] where T must …
Run Code Online (Sandbox Code Playgroud)

scala set

15
推荐指数
1
解决办法
2553
查看次数

Scala中的平等关系

我只是偶然发现了Tony Morris 关于Java博客文章之一以及该语言的一个基本问题:为集合定义一个定制的平等关系.这是我认为是一个大问题,并想知道是否有一些scala解决方案.

经典问题表现在考虑交易.假设我在@ 150p进行了两笔+100沃达丰股票交易.这两笔交易是平等的,是吗?除非他们不是同一笔交易.对于普通的真实世界系统,使用持久性或序列化,我不能依赖身份来告诉我两个引用是否属于同一行业!

所以我想要的是能够创建一个我可以传递Equality-relation的集合:

val as = CleverSet[Trade](IdEquality)
val bs = CleverSet[Trade](EconomicsEquality)
Run Code Online (Sandbox Code Playgroud)

我如何以有效的方式实现我的集合(除非EqualityRelation还定义了一种hash机制)?

trait EqualityRelation[T] {
  def equal(t1: T, t2: T) : Boolean
  def hash(t: T) : Int
}
Run Code Online (Sandbox Code Playgroud)

所以问题是:

  • 有没有提供这种能力的图书馆?
  • 有没有办法在Scala中做到这一点?

似乎带有隐含,添加到现有的scala Set类型将是一件非常容易的事情.

scala equality equals scala-2.8 scala-collections

8
推荐指数
1
解决办法
3175
查看次数

标签 统计

scala ×2

equality ×1

equals ×1

scala-2.8 ×1

scala-collections ×1

set ×1