Scala で case class をソートする
こんにちは、 @kz_morita です。
Scala で case class は非常に便利でよく使いますが,case class でソートしたい場合などに工夫が必要なのでまとめます.
ソートする方法 以下のような UserId データを考えます.
case class UserId(value: Int) val ids = Seq(UserId(1), UserId(5), UserId(10), UserId(2), UserId(4)) ids.sorted 上記のようにソートされた値を取得しようとすると以下のようなエラーが表示されます.
No implicit Ordering defined for B where: B is a type variable with constraint >: UserId .. I found: scala.math.Ordering.ordered[B]( /* missing */summon[scala.math.Ordering.AsComparable[B]] ) But no implicit values were found that match type scala.math.Ordering.AsComparable[B] UserId クラスが Ordering トレイトが実装していないため,比較ができずにソートすることができないです.
case class の配列である ids をソートしたいといったユースケースを実現するためにいくつか方法があるのでまとめます.