[解決済み】ScalaのfoldLeftとreduceLeftの違いについて
質問
の基本的な違いを学びました。
foldLeft
と
reduceLeft
foldLeftです。
- 初期値を渡す必要がある
reduceLeftです。
- コレクション内の最初の要素を初期値として受け取る
- コレクションが空の場合、例外を投げる
他に違いはありますか?
同じような機能を持つ2つのメソッドを用意する具体的な理由は何ですか?
どのように解決するのですか?
実際の回答をする前に、ここでいくつか触れておきたいことがあります。
-
ご質問の内容とは関係ありません。
left
リデュースとフォールディングの違いについてです。 - 違いは実装では全くなく、シグネチャを見るだけです。
- この質問は特にScalaとは関係なく、むしろ関数型プログラミングの2つの概念についてです。
質問に戻ります。
の署名は以下の通りです。
foldLeft
(また
foldRight
という点を考慮して)。
def foldLeft [B] (z: B)(f: (B, A) => B): B
そして、以下がその署名です。
reduceLeft
(ここでも方向は重要ではありません)
def reduceLeft [B >: A] (f: (B, A) => B): B
この2つは非常によく似ているため、混乱を招きました。
reduceLeft
の特殊なケースです。
foldLeft
(ちなみに、これは、あなたが
時々
は、どちらを使っても同じことを表現できます)。
を呼び出すと
reduceLeft
で言う
List[Int]
は、整数のリスト全体を文字どおりひとつの値に変換し、その値は
Int
(のスーパータイプ)。
Int
したがって
[B >: A]
).
を呼び出すと
foldLeft
で言う
List[Int]
はリスト全体を折りたたんで (紙を丸めるようなイメージで) 一つの値にまとめますが、この値は必ずしも
Int
(そのため
[B]
).
以下はその例である。
def listWithSum(numbers: List[Int]) = numbers.foldLeft((List.empty[Int], 0)) {
(resultingTuple, currentInteger) =>
(currentInteger :: resultingTuple._1, currentInteger + resultingTuple._2)
}
このメソッドは
List[Int]
を返し
Tuple2[List[Int], Int]
または
(List[Int], Int)
. これは合計を計算し、整数のリストとその合計を含むタプルを返します。ところで,リストは逆向きに返されます.
foldLeft
の代わりに
foldRight
.
見る すべてを支配する一つの折り畳み をご覧ください。
関連
-
[解決済み] GSON JsonObject "Unsupported Operation Exception: null" getAsString
-
[解決済み] NotUsedとDoneの理解
-
[解決済み] ScalaのSeqとListの違いについて
-
[解決済み] クロージャ」と「ラムダ」の違いは何ですか?
-
[解決済み] Scalaのオブジェクトとクラスの違い
-
[解決済み] Scala vs. Groovy vs. Clojure [終了しました]。
-
[解決済み] Scalaのcase classとclassの違いは何ですか?
-
[解決済み】Scalaのvarとvalの定義の違いは何ですか?
-
[解決済み] Scalaで環境変数を読み込む方法
-
[解決済み] First Class FunctionとHigh Order Functionの違いについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Sparkです。CoarseGrainedSchedulerが見つかりませんでした。
-
[解決済み] Seq[Future[Person]]ではなく、Future[Seq[Person]]を取得する方法
-
[解決済み] NoClassDefFoundError: org/apache/hadoop/fs/StreamCapabilities (s3データをsparkで読み込む際に発生します。
-
[解決済み] A の値をキーとして Seq[A] を Map[Int, A] に変換する方法は?
-
[解決済み] sparkでrddオブジェクトをdataframeに変換する方法
-
[解決済み】ScalaのfoldLeftとreduceLeftの違いについて
-
[解決済み】Scalaのウェブフレームワークは何がありますか?[クローズド]
-
[解決済み] 2つのマップをマージし、同じキーの値を合計するための最良の方法?
-
[解決済み] Scalaの識別子 "implicitly "とは?
-
[解決済み] データセットにカスタムオブジェクトを格納する方法は?