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

Som*_*ame 7 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
Run Code Online (Sandbox Code Playgroud)

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

是否有一种适用TupleXStrings 的简洁方法?

And*_*kin 7

def checkOverlapping(x: Product, y: Product): Boolean = {
  val s = x.productIterator.toSet
  y.productIterator.exists(s)
}
Run Code Online (Sandbox Code Playgroud)

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