val a = List(1, 2, 3, 4, 5, 6, 7)
考慮與foldLeft
以下行:
a.foldLeft(""){case (num, sum) => sum + (num.toString + "-")}
我的期望是,該計劃是要幹什麼:
(((((「7」+「6」)+「5」)+「4-」)+「3-」)+「2-」)+「1-」
7-6-5-4-3-2-1-
但我得到的是:7654321-------
。爲什麼會這樣?
val a = List(1, 2, 3, 4, 5, 6, 7)
考慮與foldLeft
以下行:
a.foldLeft(""){case (num, sum) => sum + (num.toString + "-")}
我的期望是,該計劃是要幹什麼:
(((((「7」+「6」)+「5」)+「4-」)+「3-」)+「2-」)+「1-」
7-6-5-4-3-2-1-
但我得到的是:7654321-------
。爲什麼會這樣?
您將參數混合到foldLeft
。檢查文檔List.foldLeft
。請注意,z
「零」值與函數參數中的第二個參數的類型相同,而不是第一個。
這應該工作更接近預期:
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-
從你的期待,我期待你的預期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-