Map.foldLeftをどのように使用しますか? docs によると、
foldLeft [B] (z: B)(op: (B, (A, B)) ⇒ B) : B
しかし、私は問題を抱えています:
Map("first"->1,"second"->2).foldLeft(0)((a,(k,v)) => a+v )
エラー:正式な仮パラメータではありません
エラーは、kの前の開き角かっこを指します。
(a, (k, v))
構文を使用する場合は、パターンマッチングを使用するようコンパイラーに指示する必要があります。
Map("first"->1, "second"->2).foldLeft(0){ case (a, (k, v)) => a+v }
case
ステートメントには中括弧が必要です。
あなたが期待するようにタプルでパターンマッチを行うことはできないと思います:
Map("first"->1,"second"->2).foldLeft(0)((a, t) => a + t._2)
実際には、値と合計を使用する方が簡単です。
Map("first"->1,"second"->2).values.sum
トリックは、コードブロックとして部分関数を使用することです。つまり、引数に一致するcase
ステートメントを追加します。
Map("first" -> 1, "second" -> 2).foldLeft(0) { case (a, (k, v)) => a + v }
これは実際にはあなたの質問に対する答えではありませんが、折り目から始めるときに役立つので、とにかく言います! foldLeft
の/:
メソッド「エイリアス」は、次の2つの理由により明確になる場合があることに注意してください。
xs.foldLeft(y) { (yy, x) => /* ... */ }
(y /: xs) { (yy, x) => /* ... */ }
2行目に注意してください。
y
がfolded intoコレクションxs
であることはより明確ですTuple2
引数の順序は、メソッド「call」の順序と同じであることを簡単に覚えることができます。