scalascala-collectionsbijection

Scala test a Map is bijective


What is a simple approach to testing whether a Map[A,B] is bijective, namely for

val m1 = Map( 1 -> "a", 2 -> "b")
val m2 = Map( 1 -> "a", 2 -> "a")

we have that m1 is bijective unlike m2.


Solution

  • You could do

    val m = Map(1 -> "a", 2 -> "a")
    val isBijective = m.values.toSet.size == m.size
    

    A bijection is one-to-one and onto. The mapping defined by a Map is definitely onto. Every value has a corresponding key.

    The only way it's not one-to-one is if two keys map to the same value. But that means that we'll have fewer values than keys.