我有一些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
中执行此操作的惯用方法是什么?
答案 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)