Aufzählung reduzieren - Teil Eins: Die Reise beginnt

Titelfolie für „Enumerable reduzieren - Ein illustriertes Abenteuer“

Erblicken! Die Lemuren haben sich entschieden, auf einem textbasierten Medium zu erscheinen, und bringen den gesamten illustrierten Inhalt aus „Reduzieren von Aufzählungen - Ein illustriertes Abenteuer“ mit.

Wenn Sie die vollständige RubyConf-Version des Vortrags sehen möchten, finden Sie diese hier:

Da dies eine sehr bildintensive und geschichtengetriebene Präsentation war, werden wir dies aus Gründen der Verdaulichkeit in mehrere Artikel aufteilen.

Inhaltsverzeichnis

  1. Die Reise beginnt
  2. Chartreuse - Der Meister der Karte
  3. Indigo - Der Meister der Auswahl
  4. Violett - Der Meister des Findens
  5. Cerulean - Der Meister von Tally By
  6. Eine letzte Lektion von Scarlet

Weiter >>

Treffen Sie Rot

Rot winkt hallo

Treffen Sie Red, den Lemur. Er ist ein Schüler des großen Meisters Scarlet und lernt, wie man reduziert.

Er übt schon seit einiger Zeit, Zahlen zu summieren und die Methoden der funktionalen Programmierung zu lernen.

Zu diesem Zeitpunkt glaubt er, dass er ziemlich geschickt darin ist, wenn er nicht bereit ist, die Meisterschaftsprüfungen selbst zu versuchen.

Rot mit einem Hammer, der darüber nachdenkt, Dinge zu reduzieren

Jetzt liebt Rot es absolut zu reduzieren und vor allem große Zahlenstapel in einfache Summen zu reduzieren. Er ist in der Tat ziemlich gut darin geworden.

Rot träumt davon, große Zahlenstapel zu reduzieren

In der Tat so gut, dass er ziemlich besessen davon ist, und er möchte uns die Grundlagen zeigen, wie Reduzieren funktioniert. Sollen wir einen Blick darauf werfen?

Ein Blick in Reduzieren

Jetzt ist Reduzieren eine sehr interessante Funktion in Enumerable, und sehr häufig ist es schwer zu verstehen, was es tut.

Lassen Sie uns einen kleinen Blick darauf werfen, wie es funktioniert.

Liste von 1, 2 und 3 Summen bis 6

Reduzieren nimmt im Fall einer Summe eine Liste von Zahlen auf und gibt die Summe dieser Zahlen zurück.

[1,2,3] .reduce (0) {| a, v | a + v} # => 6

Der Code dafür könnte ungefähr so ​​aussehen, aber das ist ein bisschen schwer zu verstehen, also lasst es uns ein bisschen aufschlüsseln, sollen wir?

Akkus

Betrachtet man den Akkumulator, so wird 0 in der Funktion dargestellt und mit dem Wert 6 zurückgegeben

Wir beginnen mit einem Akku. Ein Akkumulator beginnt als erstes zu reduzierendes Argument, und in diesem Fall ist es 0. Warum 0? Wenn wir etwas zu 0 hinzufügen, erhalten wir diese Zahl zurück. Das macht es zu einem guten „leeren“ Element.

Wenn die Liste leer ist, bekommen wir unser leeres Element zurück!

Wir werden sehen, dass unser Akku in diesem Artikel als angezeigt wird.

Listen und Werte

Betrachten Sie die Liste von 1, 2 und 3, die in der Funktion als v dargestellt sind

Als nächstes sehen Sie unsere Liste, die in diesem Artikel als v angezeigt wird. Jedes Element unserer Liste wird beim Reduzieren wiederholt und in die Funktion v übertragen.

Werte und Akkumulatoren verbinden

Betrachten Sie den Plus-Operator, der zum Verbinden eines Akkumulators verwendet wird, und einen Wert zum Erstellen eines neuen Akkumulators

Zuletzt und vielleicht am wichtigsten ist, wie wir unseren Wert und unseren Akkumulator zusammenfügen, um einen neuen Akkumulator zu bilden. In diesem Fall +.

Das Interessante dabei ist, dass die Art und Weise, wie wir Dinge zusammenfügen, sich auch auf unseren leeren Wert auswirkt. Es wäre sehr wenig sinnvoll, eine Zahl mit Multiplikation zu verbinden, wenn unser angeblich leerer Wert 0 ist, nein?:

[1, 2, 3] .reduce (0) {| a, v | a * v} => 0

Es würde immer 0 zurückgeben! Stattdessen möchten wir 1 für diese bestimmte Paarung verwenden.

Jetzt alle zusammen

0 + 1, 2, 3

Alles in allem könnten wir also etwas haben, das ein bisschen so aussieht. Reduzieren Sie die Liste von 1, 2, 3 mit + auf den Startwert 0, um die Werte miteinander zu verbinden.

Häufiger könnte das ungefähr so ​​aussehen:

0 + 1 + 2 + 3

Aber wie genau funktioniert das? Wie verfolgen wir diesen Datenfluss? Schauen wir uns das an.

Wie Reduzieren Reduziert

Jeder Schritt der Reduzierung, wie im folgenden Text erläutert

Für jede Reduktionsschleife übergeben wir unseren Akkumulator und unseren nächsten Wert an die Funktion. Was auch immer von dieser Funktion zurückgegeben wird, wird beim nächsten Reduktionslauf zum neuen Akkumulator.

  1. Wir beginnen mit einem Anfangswert von 0 und addieren 1 dazu, wodurch wir einen neuen Akkumulator von 1 erhalten.
  2. Das bedeutet, dass wir in der nächsten Schleife mit 1 beginnen und den nächsten Wert in unserer Liste hinzufügen, 2, was uns 3 ergibt.
  3. In unserer letzten Schleife haben wir einen Akkumulator von 3 und einen letzten Wert von 3.
  4. Jetzt, da Reduzieren keine Zahlen mehr hat, um zu reduzieren, gibt es den endgültigen Akkumulator zurück, den es hatte. In diesem Fall lautet unsere Antwort 6.

Was ist Reduzieren?

Erläutern der Kernelemente von Reduzieren, wie im folgenden Text erwähnt

Reduzieren ist eine Möglichkeit, eine Liste vieler Dinge zu erstellen und sie mithilfe eines Anfangswertes in eine Sache zu reduzieren und Werte zu einem neuen Akkumulator zusammenzufügen.

Meister der funktionalen Programmierung

Red träumt von sich selbst als weiser Meister mit großen Kräften

Dies macht uns jetzt sicherlich zu Meistern der funktionalen Programmierung, zu Trinkern der Quelle des Wissens, weise über unsere Jahre hinaus und mächtig über die sterbliche Abrechnung hinaus! Die volle Kraft von Ruby ist an unseren Fingerspitzen und nichts kann uns aufhalten!

Nun, bis auf eine Sache ...

Aufzählbare # Summe

[1,2,3] .sum # => 6

Ruby 2.4+ hat eine neue Funktion eingeführt, sum, die ungefähr dasselbe tut.

Als Red dies erkennt, ist er merklich verstört. Alles, was er zuvor gelernt hatte, schien angesichts dieser neuen Funktion völlig irrelevant zu sein, was ihn dazu brachte, eine sehr schwierige Frage zu stellen:

Ist Reduzieren unnötig?

War Reduzieren unnötig? Er beschloss, zu der einen Quelle zu gehen, von der er wusste, dass sie eine Antwort auf seine Frage haben würde, seinem Meister Scarlet.

Nach Hilfe fragen

Red schrieb einen Brief und fragte sie ganz einfach:

Roter Brief an den Meister: „Verringert sich die Summenrate? - Rot

Reduziert sich der Summen-Kill? Mit dem Brief begann Red auf und ab zu gehen und wartete gespannt auf eine Antwort. Endlich kam es, sein Meister hatte auf seinen Brief geantwortet!

Rot erhält versiegelten Umschlag von seinem Meister.

… Und in dem Brief stand einfach: „Komm zu mir, wenn du lernen willst“.

Damit entschied Red, dass es Zeit war, ein Abenteuer zu beginnen.

Reise zum Meister Scarlet

Red reist, um seinen Meister zu sehen, wie im folgenden Text erklärt.

Also wagte sich Red durch die Ebenen und über die Hügel in die Berge, vorbei an Wäldern und Bächen, und dort vor ihm war ein Zeichen. Das Schild zeigte auf die Burg seines Herrn, versteckt hinter den Wolken, hoch über den Bergblicken.

Um ihn herum kreisten riesige Lichtkugeln, als wollten sie diejenigen einladen, die es gewagt hatten, sie zu finden.

Damit drückte Red weiter und betrat die Burg.

Meister Scharlachrot

Red erklärt seinem Meister seine missliche Lage.

Also traf Red Meister Scarlet in ihrem Schloss und begann ihr von all den Dingen zu erzählen, die er in seiner Zeit seit seiner Abreise gelernt und getan hatte. Er hatte viel gelernt und war gewachsen, aber er hatte immer noch das Gefühl, dass etwas fehlte, etwas, das nur sie ihm zeigen konnte, also fragte Red:

"Weiser Meister, macht die Summe die Reduzierung nutzlos?" fragte Red.

Scharlachrotes leuchtendes Rot

„Ah Red. Denken Sie vielleicht für einen Moment daran, dass Sie mehr als nur mit Reduzieren summieren können. Was wäre, wenn wir Subtraktion verwenden würden? Multiplikation? Aufteilung? Was ist, wenn wir überhaupt keine Zahlen verwenden? “ antwortete Scarlet.

Scharlachrot zeigt Rot ein leeres Array und eine Verbindungsfunktion, drücken Sie

„Vielleicht haben wir stattdessen ein leeres Array und versuchen, Elemente hinzuzufügen. Was könnte man damit machen? " fragte Scarlet.

Scarlet schickt Red auf ein Abenteuer

„Ich weiß genau das Richtige. Sie finden drei Meister im Land der Aufzählung. Gehen Sie raus und lernen Sie von ihnen über ihre Funktionen und sehen Sie, ob Sie herausfinden können, wie Sie Reduce verwenden können, um dasselbe zu tun. “

Damit ließ Scarlett Red viel zu denken und eine Karte, die ihm auf seinem Weg helfen sollte.

In das Land der Aufzählungen

Rot mit Blick auf die Karte, Blick über das ganze Land von Enumerable

Damit ging er in die Ecken der Karte, um von den Meistern zu lernen, die er dort finden würde. Das Land der Aufzählung war ein riesiger Ort voller Überraschungen und Kuriositäten, aber mit Hilfe seines Meisters und seiner vertrauenswürdigen Karte würde Red genau das finden, was er brauchte.

Rot mit einer Nahaufnahme der Karte mit einem Pfad zur „Karte“

Der erste Meister, den Red treffen sollte, war der Meister von Map, Chartreuse.

Weiter >>