java - 具有两种参数类型的 Scala 向左折叠
问题描述
如何将此基本函数func2转换为 Scala 中的折叠?
这是迭代方法。我使用两个功能。
def func1(list1: List[foo], item: bar): List[foo] = {
does something to the list and returns it
}
def func2(list1: List[bar]): List[foo] = {
var newList = List[foo]() // starts with an empty list
for (item <- list1){ //cycle through list
newList = func1(newList, item)
}
return newList;
}
我想逐项遍历列表。通过每个项目的函数运行它并将该函数的结果设置为列表。
然后,继续运行该函数,并使用新列表(累加器)作为我使用下一次迭代的函数调用的列表。
我试过这样做:
def func2(list1: List[bar]): List[foo] = {
var newList = list1.foldLeft( (List[foo]() )(list1) => {return func1(_,_) } );
但它没有用。我知道我很接近,但语法错误。任何帮助是极大的赞赏。
解决方案
我想这就是你所需要的。
def func2(list1 :List[Bar]) :List[Foo] =
list1.foldLeft(List.empty[Foo])(func1)
你不想使用return
. 它通常是不需要的,有时它会做你意想不到的事情。
推荐阅读
- python - 使用正则表达式应用 root.xpath() 会返回一个 lxml.etree._ElementUnicodeResult
- python - 使用 ChoiceType 计算 sqlalchemy 模型中的相关项目
- floating-point - 双数的表示
- c# - 如何使用线程在 VS 中移动 Powerpack Ovalshape
- r - 用颜色渐变绘制 geom_segment 线?(或者还有另一种强调开始与结束的方法吗?)
- c# - 动态添加的面板总是将索引设为 0
- python - 如何使用python按一定大小过滤和列出s3文件夹中的所有对象
- r - 用for循环输出填充矩阵
- javascript - 我如何在这里关闭我的覆盖模式框,它不起作用
- python - 正则表达式适用于 Sublime,而不适用于 Python (Jupyter)