【问题标题】:Subdivide a list into list of lists [duplicate]将列表细分为列表列表[重复]
【发布时间】:2014-11-17 17:29:08
【问题描述】:

我想将一个列表细分为多个列表,每个子列表都有一个最大大小。例如,给定 List(1,2,5,3,90,3,4,1,0,3) 和定义为 4 的子列表的最大大小,我想返回 List(List(1,2,5,3), List(90,3,4,1), List(0,3))

这是已经完成的:

val l: List[Int] = ???
val subSize: Int = 4
val rest: Int = if(l.size % subSize == 0) 1 else 0

val subdivided: List[List[Int]] = for{
  j <- List.range(0, l.size/subSize - rest, 1)
}yield{
  for{
    i <- List.range(subSize*j,subSize*j+3,1)
    if(i < l.size)
  }yield{
    l(i)
  }
}

有没有更好、更实用的方法?

【问题讨论】:

    标签: algorithm scala functional-programming


    【解决方案1】:

    是的,使用grouped

    scala> List(1,2,5,3,90,3,4,1,0,3).grouped(4).toList
    res1: List[List[Int]] = List(List(1, 2, 5, 3), List(90, 3, 4, 1), List(0, 3))
    

    请注意,grouped 实际上会返回一个Iterator,这样您就可以懒惰地遍历集合,而无需一次完成所有计算。

    【讨论】:

      猜你喜欢
      • 2018-05-26
      • 1970-01-01
      • 2020-09-06
      • 1970-01-01
      • 1970-01-01
      • 2011-01-14
      • 2020-11-01
      • 2014-02-28
      • 2021-08-06
      相关资源
      最近更新 更多