1

私は次のデータ構造を持っています:

List(Map(
    1365094146000000 -> Map(latitude -> 45.30397), 
    1365094752000000 -> Map(latitude -> 45.30405), 
    1365094449000000 -> Map(latitude -> 45.30412), 
    1365095351000000 -> Map(latitude -> 45.30400), 
    1365095054000000 -> Map(latitude -> 45.30400)), 
    Map(
    1365094146000000 -> Map(longitude -> -75.89806), 
    1365094752000000 -> Map(longitude -> -75.89806), 
    1365094449000000 -> Map(longitude -> -75.89811), 
    1365095351000000 -> Map(longitude -> -75.89804), 
    1365095054000000 -> Map(longitude -> -75.89809)))

結果のオブジェクトが次のようになるように、これらのマップをマージする最良の方法は何ですか:

Map(1365094146000000 -> Map(latitude -> 45.30397, longitude -> -75.89806),
    1365094752000000 -> Map(latitude -> 45.30405, longitude -> -75.89806))

ありがとう

4

3 に答える 3

2

別の可能性:

val latitude = "latitude"
val longitude = "longitude"

val data : List[Map[Long, Map[String, Double]]] = List(Map(
    1365094146000000L -> Map(latitude -> 45.30397),
    1365094752000000L -> Map(latitude -> 45.30405),
    1365094449000000L -> Map(latitude -> 45.30412),
    1365095351000000L -> Map(latitude -> 45.30400),
    1365095054000000L -> Map(latitude -> 45.30400)),
    Map(
    1365094146000000L -> Map(longitude -> -75.89806),
    1365094752000000L -> Map(longitude -> -75.89806),
    1365094449000000L -> Map(longitude -> -75.89811),
    1365095351000000L -> Map(longitude -> -75.89804),
    1365095054000000L -> Map(longitude -> -75.89809)))

 data match {
   case List(latmap, longmap) =>
     for ((key, vlat) <- latmap; vlong <- longmap.get(key)) yield (key, vlong ++ vlat)
 }
于 2013-04-05T22:03:37.800 に答える
0

Scalaz は、あなたがやりたいことを実現する素晴らしい方法を提供します:

import scalaz._, Scalaz._

val lst = List(Map(
    1365094146000000l -> Map("latitude" -> 45.30397), 
    1365094752000000l -> Map("latitude" -> 45.30405), 
    1365094449000000l -> Map("latitude" -> 45.30412), 
    1365095351000000l -> Map("latitude" -> 45.30400), 
    1365095054000000l -> Map("latitude" -> 45.30400)), 
    Map(
    1365094146000000l -> Map("longitude" -> -75.89806), 
    1365094752000000l -> Map("longitude" -> -75.89806), 
    1365094449000000l -> Map("longitude" -> -75.89811), 
    1365095351000000l -> Map("longitude" -> -75.89804), 
    1365095054000000l -> Map("longitude" -> -75.89809)))

scala> lst(0) |+| lst(1) foreach println
(1365094146000000,Map(longitude -> -75.89806, latitude -> 45.30397))
(1365094752000000,Map(longitude -> -75.89806, latitude -> 45.30405))
(1365094449000000,Map(longitude -> -75.89811, latitude -> 45.30412))
(1365095351000000,Map(longitude -> -75.89804, latitude -> 45.304))
(1365095054000000,Map(longitude -> -75.89809, latitude -> 45.304))

コードの仕組みの詳細については、「semigroup」を検索してください。

于 2013-04-05T22:12:36.317 に答える