在 HashMap 列表上应用折叠函数并返回 Scala 中另一种类型的列表

发布于 2025-01-09 08:31:33 字数 553 浏览 1 评论 0原文

我试图在包含不同类型元素的列表上使用折叠函数。 这是我的代码的简化版本:

val list: List[Int] = List(1, 1, 1, 1)
val listOfMap: List[Map[String, Int]]= List(Map("a" -> 1), Map("a" -> 2))

def addN(list: List[Int], n: Int) = list.map(_+n)

val result = listOfMap.fold(list)((x, y) => addN(x, y("a")))

我期望 结果 将是一个整数列表:

List(4, 4, 4, 4)

但是,我的错误得到的类型不匹配:

x:必需:List[Int],找到:Iterable[Any],带有部分函数[Int with String,Int],带有等于

“a” :必需:Int with String、Found String

I am trying to use the fold function on Lists that contain elements of different types.
Here's a simplified version of my code:

val list: List[Int] = List(1, 1, 1, 1)
val listOfMap: List[Map[String, Int]]= List(Map("a" -> 1), Map("a" -> 2))

def addN(list: List[Int], n: Int) = list.map(_+n)

val result = listOfMap.fold(list)((x, y) => addN(x, y("a")))

I am expecting the result will be a List of Integer:

List(4, 4, 4, 4)

However, the error that I got were Type Mismatch for:

x : Required: List[Int], Found: Iterable[Any] with Partial Function[Int with String, Int] with Equals

"a": Required: Int with String, Found String

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

独木成林 2025-01-16 08:31:33

折叠 不要做你的想法。
对于此类问题,Scala 标准库文档是您的朋友: https: //www.scala-lang.org/api/2.13.3/index.html

def fold[A1 >: A](z: A1)(op: (A1, A1) => A1): A1

使用指定的关联二元运算符折叠此集合的元素。

您需要 FoldLeft

def foldLeft[B](z: B)(op: (B, A) => B): B

将二元运算符应用于起始值和该序列的所有元素,从左到右。

注意:对于无限大小的集合不会终止。

在你的情况下

val result = listOfMap.foldLeft(list)((x, y) => addN(x, y("a")))
//List(4, 4, 4, 4): scala.collection.immutable.List[scala.Int]

fold don't do what you think.
For this kind of problem, Scala standard Library Documentation is your friend : https://www.scala-lang.org/api/2.13.3/index.html

def fold[A1 >: A](z: A1)(op: (A1, A1) => A1): A1

Folds the elements of this collection using the specified associative binary operator.

You need foldLeft instead

def foldLeft[B](z: B)(op: (B, A) => B): B

Applies a binary operator to a start value and all elements of this sequence, going left to right.

Note: will not terminate for infinite-sized collections.

in your case

val result = listOfMap.foldLeft(list)((x, y) => addN(x, y("a")))
//List(4, 4, 4, 4): scala.collection.immutable.List[scala.Int]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文