Seq[(A, B)]
var. Bu tür koleksiyonlara örtülü bir yöntem eklemek istedim, böylece Map[A, Seq[B]]
'u geri almak için .toMultiMap
yapabilirim.Genel olarak Scala koleksiyonlarını genişletme
implicit class PairsExtensions[A, B](t: Traversable[(A, B)]) {
def toMultiMap: Map[A, Traversable[B]] = t.groupBy(_._1).mapValues(_.map(_._2))
}
Ama şimdi sorun hep değerler için Traversable
geri almak geçerli:
Bu
benim ilk girişimdi.Set[(A, B)].toMultiMap
yaparsam
Map[A, Set[B]]
'u geri almak istiyorum. Çalışmazsa,
implicit class PairsExtensions2[A, B, Repr[_] <: Traversable[(A, B)]](t: TraversableLike[(A, B), Repr[(A, B)]]) {
def toMultiMap(implicit bf: CanBuild[B, Repr[B]]): Map[A, Repr[B]] = t.groupBy(_._1).mapValues(_.map(_._2))
}
Ama:
val m1: Map[Int, Set[String]] = Set.empty[(Int, String)]
val m2: Map[Int, List[String]] = List.empty[(Int, String)]
Bunu yapmanın yolu nedir
Yani, o zaman böyle bir şey denedi?
m-ZL @ Maalesef açık olmak gerekirse, ilk girişim derler ve eserleri. İkinci snippet derlemiyor .. Sadece denememi yayınlıyordum. – pathikrit
Sadece 2 kuruşum: “Set” üzerinde “.toMultiMap” için bir “Map” [A, Set [B] ') vermenin gerçekten mantıklı olup olmadığını yeniden düşünmek isteyebilirsiniz. Eski ve ikinci koleksiyonlardaki teklik oldukça farklı olacaktır. – Owen
@Owen: Anladım. Sorunun amacı, özellikle .toMultiMap'in yapılması değil, Scala koleksiyonları için genel araçların nasıl yazılacağıdır. Hayal edebiliyorsunuz, 'List 'ı İstiyorum' Harita [A, Liste [B]]' geri döndü ve Seq's için, istiyorum Harita [A, Seq [B]] ' – pathikrit