拆分设置为多个集Scala

时间:2017-03-22 06:37:07

标签: scala collections

我有一些Set[String]和一个号码devider: Int。我需要将这些集合任意分割成每个大小为devider的片段。例子:

1

Set: "a", "bc", "ds", "fee", "s"
devider: 2
result: 
    Set1: "a", "bc"
    Set2: "ds", "fee"
    Set3: "s"

2

Set: "a", "bc", "ds", "fee", "s", "ff"
devider: 3
result: 
    Set1: "a", "bc", "ds"
    Set2: "fee", "s", "ff"

3

Set: "a", "bc", "ds"
devider: 4
result: 
    Set1: "a", "bc", "ds"

Scala中执行此操作的惯用方法是什么?

2 个答案:

答案 0 :(得分:17)

您可能需要以下内容:

Set("a", "bc", "ds", "fee", "s").grouped(2).toSet

问题在于,根据定义,Set没有顺序,因此无法确定将哪些元素组合在一起。

Set( "a", "bc", "ds", "fee", "s").grouped(2).toSet
//res0: Set[Set[String]] = Set(Set(s, bc), Set(a, ds), Set(fee))

要以特定方式对它们进行分组,您需要将Set更改为其中一个有序集合,根据需要对元素进行排序,对它们进行分组,然后将所有内容转换回Set s

答案 1 :(得分:2)

仅当它是类似这样的列表时,才有可能

val pn=List("a", "bc", "ds", "fee", "s").grouped(2).toSet
println(pn)