gpt4 book ai didi

scala - 使用给定的部分大小列表将 Scala 列表拆分为多个部分。[分区]

转载 作者:行者123 更新时间:2023-12-02 08:06:09 24 4
gpt4 key购买 nike

我有两个列表:

val list1:List[Int]   =  List(5, 2, 6)

val list2:List[Any] = List("a", "b", "c", "d", "e", "f", "g", "h", "i", "j","k")

这样 list1.sum >= list2.size

I want a list of lists formed with elements in list2 consecutively with the sizes mentioned in list1.

例如:

如果 list1 是 List(5,2,4) 我想要的结果是:

List(List("a", "b", "c", "d", "e"),List("f", "g"),List("h", "i", "j","k"))

如果 list1 是 List(5,4,6) 我想要的结果是:

List(List("a", "b", "c", "d", "e"),List("f", "g","h", "i"),List("j","k"))

我怎样才能用简洁的代码做到这一点。

最佳答案

list2 转换为 Iterator 然后映射到 list1

val itr = list2.iterator
list1.map(itr.take(_).toList)
//res0: List[List[Any]] = List(List(a, b, c, d, e), List(f, g), List(h, i, j, k))

更新:虽然这似乎给出了预期的结果,但在别处有人指出,重复使用迭代器实际上是不安全的,并且不能保证其行为。

通过一些修改可以获得更安全的版本。

val itr = list2.iterator
list1.map(List.fill(_)(if (itr.hasNext) Some(itr.next) else None).flatten)

-- 或--

import util.Try
val itr = list2.iterator
list1.map(List.fill(_)(Try(itr.next).toOption).flatten)

关于scala - 使用给定的部分大小列表将 Scala 列表拆分为多个部分。[分区],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51335281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com