簡體   English   中英

在scala中划分一個元組序列

[英]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僅提供諸如ListVector類的具體類型的類型類實例,因此您只能使用這些實例,而不能使用Seq 如果需要通用版本,可以顯式使用typeclass:

def groupBy[S[_]: Foldable, A, B](s: S[(A, B)]) =
   s foldMap {t => Map(t._1 → List(t._2))}

這將適用於ListVector或通常的任何S[_]: Foldable -但在您不知道具體類型的情況下仍不能使用Seq

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM