突っ走り書き

見せるほどのものでは..

【Scala】Listで要素の並びを無視した比較をする

(第1版)griupByを使う

ある要素がリストにいくつ含まれているかを数えたMapを作って比較してる。

scala> def toGroupMap(l: List[String]): Map[String, Int] =
     | l.groupBy{ identity }.map{ case (k, v) => (k, v.size) }
toGroupMap: (l: List[String])Map[String,Int]

scala> toGroupMap(List("a", "b", "b")) == toGroupMap(List("b", "a", "b"))
res6: Boolean = true

// 以下の2つが false になるのが重要
scala> toGroupMap(List("a", "b", "b")) == toGroupMap(List("a", "a", "b"))
res7: Boolean = false

scala> toGroupMap(List("a", "b", "b")) == toGroupMap(List("a", "b"))
res8: Boolean = false

(改訂版)yuroyoroさんの指摘を受けて

ソートしてから比較すればよかったのか。

scala> List("a", "b", "b").sorted == List("b", "a", "b").sorted
res1: Boolean = true

scala> List("a", "b", "b").sorted == List("a", "a", "b").sorted
res2: Boolean = false

scala> List("a", "b", "b").sorted == List("a", "b").sorted
res3: Boolean = false