[英]Partition a sequence of tuple in scala
我經常編寫相同的代碼來划分元組序列:
def groupBy[A, B](s: Seq[(A, B)]) : Map[A, Seq[B]] = s.groupBy (_._1) map { case (k, values) => (k, values.map(_._2))}
有沒有更好的辦法 ?
Scalaz foldMap
更清晰,盡管可能效率較低:
import scalaz._, Scalaz._
def groupBy[A, B](l: List[(A,B)]) = l foldMap {t => Map(t._1 → List(t._2))}
由於Scalaz僅提供諸如List
或Vector
類的具體類型的類型類實例,因此您只能使用這些實例,而不能使用Seq
。 如果需要通用版本,可以顯式使用typeclass:
def groupBy[S[_]: Foldable, A, B](s: S[(A, B)]) =
s foldMap {t => Map(t._1 → List(t._2))}
這將適用於List
, Vector
或通常的任何S[_]: Foldable
-但在您不知道具體類型的情況下仍不能使用Seq
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.