2014-04-25 101 views
0

Scala收藏標準庫中是否有任何功能,對於收集類型T是否會返回收集T類型的收藏?斯卡拉收藏 - 具有自定義功能的分區

所有集合應該頂多給「元素」,訣竅就是,T不同的情況下,可以有不同的「大小」(這就是爲什麼需要自定義函數,返回的T「大小」的數量)。

回答

0

我覺得groupBy會做的伎倆:

trait Sized { 
    def size: Int 
} 

case class Foo(x: String) extends Sized { 
    def size = x.length 
} 

case class Bar(x: Int) extends Sized { 
    def size = x * 2 
} 

val list = List(Foo("a"), Foo("b"), Foo("aa"), Foo("bb"), 
       Bar(0), Bar(1), Bar(2)) 

val grouped: Map[Int,List[Sized]] = list groupBy { _.size } 

如果你不在乎大小,只是想和你集合的集合,使用grouped.values

val groups: Iterable[List[Sized]] = grouped.values 
+0

這是不正是我想要的,在這裏你將有桶(大小,listOfElementsWithGivenSize),我想要得到的東西,如:表(表(A,b,C),表(d,e)項),其中a.size + b.size + c.size <= givenValue。 – Andna

+0

scala> val groupped = list.groupBy(_。size).values 分組:Iterable [List [帶序列化大小的產品]] = MapLike(List(Foo(aa),Foo(bb),Bar(1)) ,列表(Bar(2)),List(Foo(a),Foo(b)),List(Bar(0)) –