List(1,2), "bar" -> Li-6ren">
gpt4 book ai didi

scala - 按 string-int* 模式对列表元素进行分组

转载 作者:行者123 更新时间:2023-12-04 17:54:25 25 4
gpt4 key购买 nike

我有一个列表:

List[Any]("foo", 1, 2, "bar", 3, 4, 5)

我想以这种方式对它的元素进行分组:

Map("foo" -> List(1,2), "bar" -> List(3,4,5))

我只能想象具有可变列表和变量的命令式解决方案,但解决此任务的正确方法是什么?

最佳答案

直截了当。

如果列表有元素,从 tail 中取出所有 int 并丢弃存储在 rest 中的其余部分。这就是 span 所做的。然后将 head 映射到 ints 并为 rest 递归执行此操作。

def f(a: List[Any]): Map[String, List[Int]] = a match {
case Nil => Map.empty
case head :: tail => {
val (ints, rest) = tail.span(_.isInstanceOf[Int])
f(rest) + (head.asInstanceOf[String] -> ints.map(_.asInstanceOf[Int]))
}
}

关于scala - 按 string-int* 模式对列表元素进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23910752/

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