我想确保通过使用 reduceLeft 而不是 foldLeft 来实现这一目标。我在列表中搜索给定的数字
val included = List(46, 19, 92).foldLeft(false) { (a, i) =>
| if (a) a else (i == 19)
| }
included: Boolean = true
但是我希望使用 reduceLeft 来完成相同的工作,是否可能?
答案 0 :(得分:5)
正确的方法是
val included = List(46, 19, 92).contains(19)
但如果你坚持使用reduceLeft
,那么你可以写:
val included = List(46, 19, 92).reduceLeft { (a, b) =>
if (b == 19) b else a
} == 19
答案 1 :(得分:4)
不直接。通常情况下,这些类型就是答案。
reduceLeft的类型如下:
List[A] => ((A,A) => A) => A
给定一个A列表,以及一个可以将2个A值合并为1 A值的函数,可以得到一个A值。
你能做的就是:
val a = List(46, 19, 92).reduceLeft { (a, b) =>
if(b == 19) b else a
}
val included = a == 19
当然,使用“contains”比使用其中任何一个选项更好。
答案 2 :(得分:0)
您无法以简单的方式完成此操作。使用foldLeft,您可以定义结果类型:它是累加器的类型,因此我提供了作为第一个参数的零元素的类型。
ReduceLeft使用集合的第一个元素作为累加器的零元素。因此,结果类型将与列表中的元素相同,在您的情况下为Int。