Scala'da, groupBy()
'yi bir koleksiyona çağırmak, değerlerin koleksiyon olduğu bir Map
döndürür, ancak bir MultiMap
istiyorum. Dönüşüm yapmanın en kolay yolu nedir? Yeni bir MultiMap
oluşturmaktan ve her şeyi kopyalamaktan kaçınabilir miyim?Scala özelliğinde karıştırmak için yeni bir nesne mi oluşturmalıyım?
6
A
cevap
5
cevabı düşünmek "Ben Scala özellikte karıştırmak için yeni bir nesne oluşturmak için var mı?" Evet". Nesneleri ve örtülü dönüşümleri sarma ile bazılarını en aza indirgeyebilirsiniz. Belirli sorun için
, sana "MultiMAp'inin ile MapProxy" ile sarın gerekir değişken setleri, bir değişken harita döndürmek için GroupBy (...) zorlamak edemedi.
package blevins.example
object App extends Application {
implicit def multiMapable[B](c: Iterable[B]) = new {
def groupByMM[A](f: B => A) = {
import scala.collection.mutable._
val ret = new HashMap[A,Set[B]] with MultiMap[A,B]
for (e <- c) { ret.addBinding(f(e), e) }
ret
}
}
val c = List(1,2,3,4,5,6,7,8,9)
val mm = c.groupByMM { i => if (i < 5) "alpha" else "beta" }
mm.addBinding("alpha",12)
println(mm) // Map(beta -> Set(5, 7, 6, 9, 8), alpha -> Set(3, 1, 4, 2, 12))
}
Ek'ini İşte
[String, Set mevcut bir harita sarma örneği olduğu: Ancak, kod çok fazla satır "GroupBy" kendi versiyonunu uygulamaya değil bir MultiMAp'inin içine [Uluslararası]] değerleri kopyalamadan: Bu tohum haritası b için gereklidir çünkü GroupBy sonucu (...) üzerinde yapılan edilemeyeceğini
object App extends Application {
import scala.collection.mutable._
val seed: Map[String,Set[Int]] = Map("even" -> Set(2,4,6), "odd" -> Set(1,3,5))
val multiMap = new MapProxy[String,Set[Int]] with MultiMap[String,Int] {
val self = seed
}
multiMap.addBinding("even", 8)
println(multiMap) // Map(odd -> Set(5, 3, 1), even -> Set(6, 8, 4, 2))
}
not e değiştirilebilir ve groupBy (...) değişmez bir harita döndürür.
İlgili konular
- 1. Neden varolanını kullanmak yerine bir işlev çağrısı yapmak için yeni bir nesne başvurusu oluşturmalıyım?
- 2. JavaScript'te nesne yönelimli DOM manipülasyonunda muckup karıştırmak
- 3. CSS 'content' özelliğinde yeni satır karakter dizisi?
- 4. Backbone.js Koleksiyondaki öğeleri karıştırmak
- 5. ATL projesinde sınıfları nasıl oluşturmalıyım?
- 6. GUID adımı nasıl oluşturmalıyım?
- 7. scala vaka nesne kirliliği
- 8. Scala paket nesne getClass
- 9. Scala: Nesne başlatıcısındaki paralel toplama, bir programın
- 10. Scala Yuvalanmış Nesne Serileştirme
- 11. JSF Etiketi ve HTML'yi Karıştırmak
- 12. Scala Dinamik nesne/sınıf yükleme Java'da
- 13. C++ Yeni olmayan nesne
- 14. Scala "güncelleme" değişmez nesne iyi uygulamalar
- 15. yeni Nesne {} Java'da
- 16. C# Dinamik derleme yeni bir nesne oluşturmak ve bana verilen türü için yeni bir nesne oluşturmak ve alana yüklemek çalışıyorum
- 17. Scala sıralama sabit mi?
- 18. Unity'de nasıl böyle bir görüntü oluşturmalıyım?
- 19. Nasıl bir ListView C# Öğeleri karıştırmak?
- 20. Scala - Beklenmedik tipte bir harita, kavramak için yinelenebilir mi?
- 21. Scala vaka nesnesine bir dizenin ayrışması için yerleşik mi?
- 22. Nesne başvuruları yeni bir nesne oluşturulduktan sonra güncellenmiyor
- 23. AngularJS $ resource, nesne güncelleştiriliyor yerine yeni bir nesne oluşturuluyor
- 24. DB veya yeni bir nesne için model nesnesi nasıl denetlenir?
- 25. Scala Haskell'in `$` benzeri bir operatöre sahip mi?
- 26. Bir nesne bir referansa dönüştürülemez mi?
- 27. Python - neden yeni bir nesne örneği oluşturmuyor?
- 28. Yeni operatör NULL döndürecek mi?
- 29. Python'daki her yeni nesne için neden 2 artar?
- 30. Büyük scala kod tabanı bakımı yapılabilir mi?
Grup aranıyorBy() ve bir değişebilir koleksiyon bir mutable.Map döndürüyor. –
Değişken bir haritaya dönüşen groupBy'yi gösterebilir misiniz? Burada gösterildiği gibi bir derleyici hatası alıyorum (http://gist.github.com/245062). –
Sanırım değişmez setlerin değişmez bir haritasını döndürüyor mu? Ne olursa olsun, bir harita istemiyorum, bir multimap istiyorum. –