つくった
だれか #scala でmutableなSortedMapとかつくってたりしないのか・・・(´・ω・`) #java のやつのラッパーでもいいから・・・でもちゃんとcanBuildFrom実装してある的な・・・
で、誰も反応してくれなかったので、とりあえず、ものすごく雑につくった
import collection.mutable import java.{util => ju} class TreeMap[A, B] (implicit private val ordering: Ordering[A] ) extends mutable.Map[A, B] { private val jTreeMap: ju.TreeMap[A, B] = new ju.TreeMap(ordering) override def -=(key: A) = { jTreeMap.remove(key) this } override def +=(kv: (A, B)) = { jTreeMap.put(kv._1,kv._2) this } override def iterator: Iterator[(A, B)] = new Iterator[(A,B)]{ val ite = jTreeMap.entrySet.iterator def next = { val entry = ite.next (entry.getKey,entry.getValue) } def hasNext = ite.hasNext } override def get(key: A): Option[B] = Option(jTreeMap.get(key)) }
javaのTreeMapをwrapしただけ。しかもコンパニオンオブジェクトちゃんと実装してない(っていうかやり方わかんね)から、mapとかfilterなどの高階関数呼ぶと、scala.collection.mutable.Map型のインスタンスになるっていう超ダメな仕様*1
まぁOrderingだけimplicitにとるようにしてみたけど・・・
追記
作ってくれた人がぁ(/・ω・)/
@xuwei_k チャレンジしてみたはいいけどその辺のコードからコピペしてくる作業になってしまった… https://gist.github.com/844098
filterすると新しいTreeMap返してくれるっぽい!
しかし、mapでTuple返しても、TreeMapではなくIterableが返ってくるな・・・toTreeMap的なmethodがimplicitであったりすればいいのか・・・?
scalaコレクション完全解説
的な本が欲しい
だいぶあとになってからの追記