3

私は次のような地図を持っています:

val v = Map("01" -> List(34,12,14,23), "11" -> List(22,11,34))

マップ内のリストアイテムを並べ替える方法が見つかりません。

私は次のように試しました:

v.flatMap(v => v._2.sortBy(list => list._))

ただし、リストアイテムは並べ替えられないようです。

誰かが私がどこが間違っているか知っていますか?

更新:実際、私のリストは、のようなタプルのリストです。簡単にするためList[(Object1, Object2, Object3, Object4)]に配置しました。int(しかし_.sorted、私のオブジェクトの場合は機能しないと思います)。したがって、基本的に、このオブジェクト列の1つで並べ替えます。(例えばObject1.int

4

2 に答える 2

5

これはうまくいくようです:

v.mapValues(_.sorted)
// Map(01 -> List(12, 14, 23, 34), 11 -> List(11, 22, 34))

値がタプルの場合は、これを試してください。

v.mapValues(_.sortBy(_._1))

このアプローチは、クラスでも機能します_.sortBy(_.age)


または、マージされたリストが必要な場合:

v.values.flatten.toSeq.sorted
// List(11, 12, 14, 22, 23, 34, 34)

(タプルのリスト):

v.values.flatten.toSeq.sortBy(_._1)
于 2013-02-01T21:38:45.523 に答える
2

こういう意味ですか?

val v = Map("01" -> List(34,12,14,23), "11" -> List(22,11,34))
//v: scala.collection.immutable.Map[String,List[Int]] = Map(01 -> List(34, 12, 14, 23), 11 -> List(22, 11, 34))

v map { case (k, v) => (k -> v.sorted) }
//res0: scala.collection.immutable.Map[String,List[Int]] = Map(01 -> List(12, 14, 23, 34), 11 -> List(11, 22, 34))

編集または:

v mapValues (_ sorted)
//res1: scala.collection.immutable.Map[String,List[Int]] = Map(01 -> List(12, 14, 23, 34), 11 -> List(11, 22, 34))

別の編集:

タプル内のすべてのタイプに暗黙Orderingのスコープがある場合、それはまったく同じように機能するはずです。

val v = Map(
  "01" -> List((34, "thirty-four"), (12, "twelve"), (14, "fourteen"), (23, "twenty-three")), 
  "11" -> List((22, "twenty-two"), (11, "eleven"), (34, "thirty-four")))
//v: scala.collection.immutable.Map[String,List[(Int, String)]] =
//Map(
//  01 -> List((34,thirty-four), (12,twelve), (14,fourteen), (23,twenty-three)), 
//  11 -> List((22,twenty-two), (11,eleven), (34,thirty-four)))

v mapValues (_ sorted)
//res3: scala.collection.immutable.Map[String,List[(Int, String)]] =
//Map(
//  01 -> List((12,twelve), (14,fourteen), (23,twenty-three), (34,thirty-four)),
//  11 -> List((11,eleven), (22,twenty-two), (34,thirty-four)))

タプルの1つのメンバーのみでソートする場合(たとえば、この場合は2番目のメンバー):

v mapValues (_ sortBy (_ _2))
//res5: scala.collection.immutable.Map[String,List[(Int, String)]] =
//Map(
//  01 -> List((14,fourteen), (34,thirty-four), (12,twelve), (23,twenty-three)),
//  11 -> List((11,eleven), (34,thirty-four), (22,twenty-two)))
于 2013-02-01T21:37:15.437 に答える