定义:
val a = List(1, 2, 3, 4, 5, 6, 7)
请考虑以下foldLeft
行:
a.foldLeft(""){case (num, sum) => sum + (num.toString + "-")}
我的期望是该计划将会:
<(>(((&#34; 7 - &#34; +&#34; 6 - &#34;)+&#34; 5 - &#34;)+&#34; 4-& #34;)+&#34; 3 - &#34;)+&#34; 2 - &#34;)+&#34; 1 - &#34;是7-6-5-4-3-2-1-
但我得到的是:7654321-------
。为什么会这样?
答案 0 :(得分:3)
您将参数混淆为foldLeft
。查看List.foldLeft
的文档。请注意,z
“零”值与函数参数中的 second 参数具有相同的类型,而不是第一个。
这应该更接近预期:
a.foldLeft(""){case (sum, num) => sum + (num.toString + "-")}
// res0: String = 1-2-3-4-5-6-7-
但是,如果您想要按逆序排列数字,那么您可能需要使用foldRight
。也许这首先是你想要的(注意参数num
和sum
与你给出的顺序相同):
a.foldRight(""){case (num, sum) => sum + (num.toString + "-")}
// res1: String = 7-6-5-4-3-2-1-
答案 1 :(得分:1)
根据您的期望,我希望您期望foldRight
行为:
scala> val a = List(1, 2, 3, 4, 5, 6, 7)
a: List[Int] = List(1, 2, 3, 4, 5, 6, 7)
scala> a.foldRight(""){case (num, sum) => sum + (num.toString + "-")}
res0: String = 7-6-5-4-3-2-1-