perl – 在scala中创建和累积Map的Map Map
发布时间:2020-12-16 06:26:42 所属栏目:大数据 来源:网络整理
导读:我有一个包含Salesman,Product,Location,SalesValue数据的文件 例如: Bob,Carrots,United States,200Bill,Potatoes,England,100Bob,Oranges,50Bob,20 可以使用以下代码将SalesValue简洁地累积到perl中的哈希哈希值中 while(){ @cols = split(/,/); $vals {$
我有一个包含Salesman,Product,Location,SalesValue数据的文件
例如: Bob,Carrots,United States,200 Bill,Potatoes,England,100 Bob,Oranges,50 Bob,20 可以使用以下代码将SalesValue简洁地累积到perl中的哈希哈希值中 while(<>){ @cols = split(/,/); $vals {$cols[0]} {$cols[1]} {$cols[2]} += $cols[3]; } 有没有人有任何建议如何创建地图地图的地图,加上积累,最好在scala中实现? 解决方法
我建议将这些地图合并为一个monoid-append操作.
首先,我们将地图地图的地图创建为单个元素: val input = """Bob,200 |Bill,100 |Bob,50 |Bob,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,Int]]]]: List[Map[String,Map[String,Int]]]] 然后我们可以使用像scalaz或cat这样的库来汇总: import scalaz._,Scalaz._ println(mmm.suml) 这将打印(未提供): Map(Bill -> Map(Potatoes -> Map(England -> 100)),Bob -> Map(Oranges -> Map(England -> 50),Carrots -> Map(United States -> 220))) 为了帮助理解.suml操作背后发生的事情,我会无耻地建议查看我去年制作的演示文稿https://speakerdeck.com/filippovitale/will-it-blend-scalasyd-february-2015 编辑 我们还可以看到我们的地图地图地图可折叠,并使用foldMap获得相同的结果: input.map(_.split(",")) .foldMap{ case Array(n,v) => Map(n -> Map(g -> Map(c -> v.toInt))) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |