繁体   English   中英

如何在Scala中将整数列表分组

[英]How to group List of integer in Scala

我有以下列表

 List[Int] = List(50176482, 50176481, 50176485, 50176479, 50176478, 51176477, 51176483, 51176480)

我想将此列表分组为子列表,如下所示

 List1[Int] = List(50176482, 50176481, 50176485, 50176479, 50176478)

 List2[Int] = List(51176477, 51176483, 51176480)

通过用拳头引用列表中每个元素的两位数字(此处为50和51)。

只需在列表上使用一个过滤器即可检查列表中每个数字的前两位:

val list = List(50176482, 50176481, 50176485, 50176479, 50176478, 51176477, 51176483, 51176480)
val list1 = list.filter(_.toString.substring(0, 2) == "50")
val list2 = list.filter(_.toString.substring(0, 2) == "51")
println(list1)
println(list2)

输出:

List(50176482, 50176481, 50176485, 50176479, 50176478)
List(51176477, 51176483, 51176480)

演示版

您可以使用groupBy

val x = List(50176482, 50176481, 50176485, 50176479, 50176478, 51176477, 51176483, 51176480)

x.groupBy(_.toString.take(2))

这里_.toString.take(2)用于进行分组。 您可以使用任何返回数字的前两位数字的函数,即使不转换为String。

结果:

res0: scala.collection.immutable.Map[String,List[Int]] = Map(51 -> List(51176477, 51176483, 51176480), 50 -> List(50176482, 50176481, 50176485, 50176479, 50176478))

如果只需要列表,请使用.values

x.groupBy(_.toString.take(2)).values


res0: Iterable[List[Int]] = MapLike(List(51176477, 51176483, 51176480), List(50176482, 50176481, 50176485, 50176479, 50176478))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM