如何简洁地检查元组是否没有重叠成员

时间:2019-03-16 01:37:58

标签: scala tuples

我有两个Tuple2[String, String],我想检查它们是否没有重叠的坐标。这是一个示例:

def checkOverlapping(t1: (String, String), t2: (String, String)) =
  t1._1 == t2._1 || t1._1 == t2._2 || t1._2 == t2._1 || t1._2 == t2._2

它可以工作,但是看起来非常难看。如果是Tuple4[String, String, String, String],用手手动检查所有碰撞似乎很疯狂。

是否有一种简洁的方法适用于TupleX个中的String个?

1 个答案:

答案 0 :(得分:7)

def checkOverlapping(x: Product, y: Product): Boolean = {
  val s = x.productIterator.toSet
  y.productIterator.exists(s)
}

这适用于任意Arity的元组,也适用于Arity不同且类型不是String而是其他类型的情况。实际上,它适用于各种事物,包括case类。类型安全性基本上不会出现在窗口之外,但是可以-简洁。如果仅对特定类型的元组需要它,那么用这些元组的类型替换Product是恢复类型安全性的一种简单方法。