代码之家  ›  专栏  ›  技术社区  ›  Some Name

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

  •  1
  • Some Name  · 技术社区  · 5 年前

    我有两个 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 S?

    1 回复  |  直到 5 年前
        1
  •  2
  •   Andrey Tyukin    5 年前
    def checkOverlapping(x: Product, y: Product): Boolean = {
      val s = x.productIterator.toSet
      y.productIterator.exists(s)
    }
    

    这适用于任意arity的元组,也适用于arity不同且类型不同的情况。 String 但有些别的。实际上,它适用于所有种类的事物,包括 case -课程。类型安全基本上不在窗口,但是的-它很简洁。如果只需要特定类型的元组,则替换 Product 按照这些元组的类型,这将是恢复类型安全性的简单方法。