これらのマップをマージしてmonoid-append
として表示することをお勧めします。
まず、我々は、単一の要素としてマップのマップのマップを作成します。
val input = """Bob, Carrots, United States, 200
|Bill, Potatoes, England, 100
|Bob, Oranges, England, 50
|Bob, Carrots, United States, 20""".stripMargin.lines.toList
val mmm = input.map(_.split(", "))
.map { case Array(n, g, c, v) => Map(n -> Map(g -> Map(c -> v.toInt))) }
mmm
はタイプList[Map[String, Map[String, Map[String, Int]]]]
は次のとおりです。
List[Map[String,
Map[String,
Map[String, Int]]]]
その後、我々はscalaz
またはcats
のようなライブラリを使用してsuml
できます
import scalaz._, Scalaz._
println(mmm.suml)
これは(identedない)を印刷します:
Map(Bill -> Map(Potatoes -> Map(England -> 100)),
Bob -> Map(Oranges -> Map(England -> 50),
Carrots -> Map(United States -> 220)))
は、私はは臆面もなくは、私が昨年https://speakerdeck.com/filippovitale/will-it-blend-scalasyd-february-2015
EDIT作られたこのプレゼンテーションをチェックアウトすることをお勧め.suml
操作の背後に何が起こっているのかを理解しやすくするために
マップの地図の表示もFoldable
ですそして、同じ結果のためfoldMap
を使用します。
input.map(_.split(", "))
.foldMap{ case Array(n, g, c, v) => Map(n -> Map(g -> Map(c -> v.toInt))) }
つまり、ここではPerlが勝者です;) – Ashalynd
...はい、しかし私はPerl6を待っていますこれをもう一度使う前に:-Pこのトロルの後、私はいくつかの詳細な説明と別の答えで答えを更新します –
Map oof Mapsの地図を読む素晴らしい方法... – BarneyW