[英]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.