Skip to content

Instantly share code, notes, and snippets.

@hishidama
Created December 3, 2011 20:45
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hishidama/1428100 to your computer and use it in GitHub Desktop.
Save hishidama/1428100 to your computer and use it in GitHub Desktop.
キー毎に集計する例(irofさんの http://d.hatena.ne.jp/irof/20111203/p1 をScalaにしてみた)
//getOrElseUpdateを使ってみたバージョン
case class Data(code: String, name: String, var value: Int)
val input = Seq(
Data("A01", "hoge", 100), Data("A01", "piyo", 200),
Data("A02", "hoge", 300),
Data("A03", "hoge", 400), Data("A03", "piyo", 500)
)
def summary1(list: Seq[Data]): Seq[Data] = {
val map = scala.collection.mutable.LinkedHashMap[String, Data]()
for (d <- list) {
val data = map.getOrElseUpdate(d.code, Data(d.code, "", 0))
data.value += d.value
}
map.values.toList
}
summary1(input)
//Scalaのコレクションメソッドを駆使してみたバージョン
case class Data(code: String, name: String, value: Int)
val input = Seq(
Data("A01", "hoge", 100), Data("A01", "piyo", 200),
Data("A02", "hoge", 300),
Data("A03", "hoge", 400), Data("A03", "piyo", 500)
)
def summary2(list: Seq[Data]): Seq[Data] = {
list.groupBy(_.code).map{ case (code, data) => Data(code, "", data.map(_.value).sum) }.toSeq.sortBy(_.code)
}
summary2(input)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment