Holen Sie das Beste aus Ruby heraus, indem Sie die Methoden .select .map und .reduce zusammen verwenden

Sie sollten sich beim Schreiben von Code auf keinen Fall wiederholen. Mit anderen Worten, wiederholen Sie sich nicht zweimal. Um klar zu sein - schreiben Sie nicht etwas, was bereits erklärt wurde.

Dies wird als Tautologie bezeichnet und sollte beim Schreiben von Code jederzeit vermieden werden. Wäre es zum Beispiel nicht schön gewesen, diesen langen Absatz zu lesen, wenn ich nur die drei mächtigen Wörter „Niemals, wiederhole dich selbst“ verwendet hätte?

Nun, das ist es, was ich Ihnen zeigen werde, wie man mit Rubys .select .map- und .reduce- (oder .inject-) Methoden umgeht.

Beispiel

Angenommen, Sie sehen sich ein Wörterbuch mit Namen, Berufsbezeichnungen und Gehältern der Mitarbeiter an. Stellen wir uns auch vor, Sie wollten herausfinden, wie viel das Unternehmen insgesamt für die Gehälter der Entwickler ausgegeben hat. Ohne eine einzige Methode in Ruby würden Sie Ihren Code höchstwahrscheinlich wie folgt schreiben:

people = [ { first_name: "Gary", job_title: "car enthusiast", salary: "14000" }, { first_name: "Claire", job_title: "developer", salary: "15000" }, { first_name: "Clem", job_title: "developer", salary: "12000" } ] person1 = people[0][:job_title] person2 = people[1][:job_title] person3 = people[2][:job_title] total = 0 if person1 == "developer" total += people[0][:salary].to_i end if person2 == "developer" total += people[1][:salary].to_i end if person3 == "developer" total += people[2][:salary].to_i end puts total

Wow - das sind viele Zeilen, die geschrieben werden müssen, um nur drei Personen zu finden. Stellen Sie sich vor, das Unternehmen beschäftigt Hunderte von Mitarbeitern!

Wenn Sie etwas über Schleifen wissen, besteht der nächste einfachste Schritt darin, eine Methode zu schreiben, mit der alle Gehälter zusammengestellt werden. Dies kann nur fünf oder sechs Zeilen dauern, aber probieren Sie es aus!

puts people.selectx.mapy.reduce(:+)

Sie werden feststellen, dass jede Methode mit einer geschweiften Klammer beginnt und endet. Dies kann anstelle der Befehle do und end verwendet werden, wenn es sich um einen einzelnen Zeilenblock handelt.

{} == (do end) #for single-line blocks only

.wählen

Beginnen wir mit der .select-Methode. Wir erstellen eine Variable (x) und durchlaufen jede Methode im People-Array. Anschließend wird mit einem booleschen Ausdruck geprüft, ob der Schlüssel von (: job_title) der Zeichenfolge "Entwickler" entspricht. Wenn der Boolesche Wert true zurückgibt, platziert die select-Methode den Hash, der true zurückgegeben hat, in einem neuen Objekt.

.Karte

Die Map-Methode wird zum Erstellen eines neuen Arrays verwendet, das sich nicht auf das Array auswirkt, durch das es eine Schleife durchläuft. Ich habe diese Methode verwendet, um eine neue Variable (y) zu erstellen, und dann diese Variable verwendet, um den Wert des Schlüssels (: Gehalt) zu ermitteln. Dann habe ich diesen Wert von einer Zeichenfolge in eine Ganzzahl umgewandelt.

.Reduzieren

Dieser sieht wahrscheinlich am verwirrendsten aus, also erweitern wir ihn ein wenig.

.reduce(0) sum + indv #is the same as .reduce(:+)

Die Reduktionsmethode erstellt eine neue Variable, deren Wert in den ersten Klammern (0) gleich gesetzt wird. Anschließend erstellen Sie zwei neue Werte (sum und indv), von denen einer die Summe ist, zu der Sie die einzelnen Gehälter hinzufügen.

Ich hoffe das erklärt es gut! Bitte lassen Sie mich wissen, wenn Sie Fragen haben.