我有两个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
个?
答案 0 :(得分:7)
def checkOverlapping(x: Product, y: Product): Boolean = {
val s = x.productIterator.toSet
y.productIterator.exists(s)
}
这适用于任意Arity的元组,也适用于Arity不同且类型不是String
而是其他类型的情况。实际上,它适用于各种事物,包括case
类。类型安全性基本上不会出现在窗口之外,但是可以-简洁。如果仅对特定类型的元组需要它,那么用这些元组的类型替换Product
是恢复类型安全性的一种简单方法。