Map.foldLeft はどのように使用しますか? ドキュメントによると、次のようになります
foldLeft [B] (z: B)(op: (B, (A, B)) ⇒ B) : B
しかし、私は苦労しています:
Map("first"->1,"second"->2).foldLeft(0)((a,(k,v)) => a+v )
エラー: 有効な仮パラメータではありません
エラーは、k の前の開き括弧を指しています。
Map.foldLeft はどのように使用しますか? ドキュメントによると、次のようになります
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
がコレクションに組み込まれていることがより明確になりますxs
Tuple2
引数の順序は、メソッド「call」の順序と同じであることを簡単に思い出すことができます。