Ruby-Array-Methoden, die mit Rails verwendet werden können (außer jedem)

In diesem Artikel behandelte Ruby-Array-Methode

  1. Methode auswählen
  2. Methode ablehnen
  3. keep_if Methode
  4. Methode delete_if
  5. Methode finden
  6. Kartenmethode

Ruby-Version: Bestätigter Vorgang mit 2.5.1.

Der Grund zum Schreiben

Bisher habe ich nur die "jede Methode" verwendet, wenn es um Array-Methoden geht. (Ich bin ein Anfänger, ungefähr 2 Monate nachdem ich ernsthaft angefangen habe, Programmieren zu lernen.) Wenn ich eine persönliche Anwendung mit Rails entwickle, sage ich oft: "Ich möchte die aus der DB-Tabelle erhaltenen Array-Daten gut verarbeiten und nur die erforderlichen Elemente anzeigen, aber ich kann es nicht gut machen." Während ich verschiedene Dinge recherchierte, um das Problem zu lösen, lernte ich viel: "Gibt es eine so bequeme Methode?". Also werde ich sie als Memorandum schreiben und mein Wissen festigen.

Ich hoffe, es wird jedem helfen.

Referenziert

Junichi Itos "Einführung in Ruby für Profis"

Die Qiita-Artikel, Bücher usw. von Herrn Ito sind sehr leicht zu verstehen und immer verschuldet.

Diesmal als Muster für den Betrieb vorbereitete Anordnung

users = [
  {name: 'Matsuda', score: 80},
  {name: 'Otsuka', score: 60},
  {name: 'Koike', score: 90},
  {name: 'Inoue', score: 40},
  {name: 'Matsumoto', score: 50},
  {name: 'Fujisawa', score: 85}
]

Ich werde jede Methode erklären, während ich die Operation unten überprüfe.

1. Methode auswählen

Die select-Methode führt die im Block angegebene Verarbeitung für jedes Element des Arrays durch. Gibt nur ein Array der Elemente zurück, deren Rückgabewert "true" ist.

Tatsächlicher Betrieb bestätigt

select.rb


#Ich möchte nur Benutzer mit einer Punktzahl von 70 oder höher!

users = [
  {name: 'Matsuda', score: 80},
  {name: 'Otsuka', score: 60},
  {name: 'Koike', score: 90},
  {name: 'Inoue', score: 40},
  {name: 'Matsumoto', score: 50},
  {name: 'Fujisawa', score: 85}
]

#Verwenden Sie select, um nur Benutzer mit einer Punktzahl von 70 oder höher zu sammeln
goukaku_users = users.select { |user| user[:score] >= 70 }

#Überprüfen Sie den Inhalt der neu erstellten Variablen
p goukaku_users
# =>[{:name=>"Matsuda", :score=>80}, {:name=>"Koike", :score=>90}, {:name=>"Fujisawa", :score=>85}]

#Ich konnte ein Array nur für Benutzer mit einer Punktzahl von 70 oder höher erstellen!

2. Methode ablehnen

Die "Zurückweisungsmethode" ist das Gegenteil der "Auswahlmethode" und ist eine Methode, die ein Array zurückgibt, das nur die Elemente sammelt, deren Rückgabewert der Verarbeitung im Block "falsch" ist.

Tatsächlicher Betrieb bestätigt

reject.rb


 #Ich möchte nur Benutzer mit einer Punktzahl von 70 oder weniger!

users = [
  {name: 'Matsuda', score: 80},
  {name: 'Otsuka', score: 60},
  {name: 'Koike', score: 90},
  {name: 'Inoue', score: 40},
  {name: 'Matsumoto', score: 50},
  {name: 'Fujisawa', score: 85}
]

 #Sammeln Sie mit der Ablehnungsmethode nur Benutzer mit einer Punktzahl von 70 oder weniger
fugoukaku_users = users.reject { |user| user[:score] > 70 }

#Überprüfen Sie den Inhalt der neu erstellten Variablen
p fugoukaku_users
# => [{:name=>"Otsuka", :score=>60}, {:name=>"Inoue", :score=>40}, {:name=>"Matsumoto", :score=>50}]

#Ich konnte ein Array nur für Benutzer mit einer Punktzahl von 70 oder weniger erstellen!

3. keep_if Methode

Die Methode keep_if ruft auch jedes Element des Arrays der Reihe nach ab und führt die angegebene Verarbeitung im Block durch. Wenn der Rückgabewert "true" ist, bleibt das an den Block übergebene Element im Array, und wenn der Rückgabewert "false" ist, wird es aus dem Array gelöscht.

Tatsächlicher Betrieb bestätigt

keep_if.rb


#Ich möchte nur Benutzer mit einer Punktzahl von 70 oder höher!

users = [
  {name: 'Matsuda', score: 80},
  {name: 'Otsuka', score: 60},
  {name: 'Koike', score: 90},
  {name: 'Inoue', score: 40},
  {name: 'Matsumoto', score: 50},
  {name: 'Fujisawa', score: 85}
]

 # keep_Verwenden Sie die if-Methode, um nur Benutzer mit einer Punktzahl von 70 oder höher zu verarbeiten
 #Benutzerelement mit einer Punktzahl von weniger als 70 entfernt
users.keep_if { |user| user[:score] >= 70 }

# keep_Nach der if-Methode
p users
# => [{:name=>"Matsuda", :score=>80}, {:name=>"Koike", :score=>90}, {:name=>"Fujisawa", :score=>85}]

#Die ursprünglichen Array-Benutzer können jetzt nur noch Benutzer mit einer Punktzahl von 70 oder höher sein!

4. Methode delete_if

Die delete_if-Methode ruft auch jedes Element des Arrays der Reihe nach ab und führt die angegebene Verarbeitung im Block durch. Wenn der Rückgabewert "true" ist, wird das an den Block übergebene Element aus dem ursprünglichen Array gelöscht. Wenn der Rückgabewert "false" ist, belassen Sie ihn im Array.

Tatsächlicher Betrieb bestätigt

delete_if.rb


#Ich möchte nur Benutzer mit einer Punktzahl von 70 oder weniger!

users = [
  {name: 'Matsuda', score: 80},
  {name: 'Otsuka', score: 60},
  {name: 'Koike', score: 90},
  {name: 'Inoue', score: 40},
  {name: 'Matsumoto', score: 50},
  {name: 'Fujisawa', score: 85}
]

 # delete_Verwenden Sie die if-Methode, um nur Benutzer mit einer Punktzahl von 70 oder weniger zu verarbeiten
 #Benutzerelement mit einer Punktzahl von mehr als 70 entfernt
users.delete_if { |user| user[:score] > 70 }

# delete_Nach der if-Methode
p users
# => [{:name=>"Otsuka", :score=>60}, {:name=>"Inoue", :score=>40}, {:name=>"Matsumoto", :score=>50}]

#Die ursprünglichen Array-Benutzer wurden in ein Array von nur Benutzern mit einer Punktzahl von 70 oder weniger geändert!

Die Methoden keep_if und delete_if sind die gleichen wie die in den Abschnitten 1 und 2 erläuterten Methoden select method und reply method !? Ich dachte, aber im Vergleich

select / reject Das ursprüngliche Array bleibt unverändert, aber die Elemente, die die Bedingungen erfüllen, werden gesammelt und ein vollständig neues Array zurückgegeben. Weisen Sie es daher bei der Wiederverwendung einer Variablen zu. delete_if / keep_if Löschen Sie die Elemente, die die Bedingungen erfüllen, aus dem ursprünglichen Array. Mit anderen Worten, die Form des ursprünglichen Arrays selbst wird geändert. Daher kann es mit dem ursprünglichen Variablennamen wiederverwendet werden.

Es ist ähnlich, aber es scheint einen solchen Unterschied zu geben.

5. Methode finden

Die find-Methode gibt das erste Element zurück, für das der Rückgabewert des im Block angegebenen Prozesses true ist.

Tatsächlicher Betrieb bestätigt

find.rb


#Ich möchte den ersten Benutzer erhalten, dessen Punktzahl der Array-Benutzer 70 oder mehr beträgt!

users = [
  {name: 'Matsuda', score: 80},
  {name: 'Otsuka', score: 60},
  {name: 'Koike', score: 90},
  {name: 'Inoue', score: 40},
  {name: 'Matsumoto', score: 50},
  {name: 'Fujisawa', score: 85}
]

 #Holen Sie sich mit der Suchmethode den ersten Benutzer mit einer Punktzahl von 70 oder höher
goukaku_user = users.find { |user| user[:score] >= 70 }

#Überprüfen Sie den Inhalt der neu erstellten Variablen
p goukaku_user
# => {:name=>"Matsuda", :score=>80}

#Ich konnte den ersten Benutzer mit einer Punktzahl von 70 oder höher im Array bekommen!

Versuchen Sie für alle Fälle, den Zustand der Punktzahl im Block von 70 auf 85 zu ändern, und überprüfen Sie ihn erneut.

find.rb


#Ich möchte den ersten Benutzer erhalten, dessen Punktzahl der Array-Benutzer 85 oder mehr beträgt!

users = [
  {name: 'Matsuda', score: 80},
  {name: 'Otsuka', score: 60},
  {name: 'Koike', score: 90},
  {name: 'Inoue', score: 40},
  {name: 'Matsumoto', score: 50},
  {name: 'Fujisawa', score: 85}
]

#Holen Sie sich mit der Suchmethode den ersten Benutzer mit einer Punktzahl von 85 oder höher
goukaku_user = users.find { |user| user[:score] >= 85 }

#Überprüfen Sie den Inhalt der neu erstellten Variablen
p goukaku_user
# => {:name=>"Koike", :score=>90}

#Ich konnte den ersten Benutzer mit einer Punktzahl von 85 oder höher im Array bekommen!

6. Kartenmethode

Die map-Methode gibt den Rückgabewert als neues Array als Ergebnis der im Block für jedes Element angegebenen Verarbeitung zurück.

Tatsächlicher Betrieb bestätigt

map.rb


#Ich möchte dem Namen der Array-Benutzer "san" hinzufügen!

users = [
  {name: 'Matsuda', score: 80},
  {name: 'Otsuka', score: 60},
  {name: 'Koike', score: 90},
  {name: 'Inoue', score: 40},
  {name: 'Matsumoto', score: 50},
  {name: 'Fujisawa', score: 85}
]

san_users = users.map { |user| user[:name] + 'Herr.' }

#Überprüfen Sie den Inhalt der neu erstellten Variablen
p san_users
# => ["Herr Matsuda", "Herr Otsuka", "Herr Koike", "Inoue", "Herr Matsumoto", "Herr Fujisawa"]

Das? Es war ein bisschen anders als ich erwartet hatte. Die "Map-Methode" scheint sich ein wenig anders zu verhalten als die bisher beschriebenen Array-Methoden.

Speziell, Anstatt die Elemente des ursprünglichen Arrays auszuwerten und die Elemente zu transformieren, um die Werte zurückzugeben, werden die Rückgabewerte der Verarbeitungsergebnisse einzeln im Array gespeichert und das neu erstellte Array zurückgegeben.

Wenn Sie die Kartenmethode von JavaScript kennen, ist sie möglicherweise leicht zu verstehen.

map.rb


#Wenn Sie also im Hash-Format zurückkehren möchten, während Sie die ursprüngliche Form beibehalten, schreiben Sie wie folgt
san_users = users.map { |user| {name: user[:name]+'Herr.', score: user[:score]} }

p san_users
# => [{:name=>"Herr Matsuda", :score=>80}, {:name=>"Herr Otsuka", :score=>60}, {:name=>"Herr Koike", :score=>90}, {:name=>"Inoue", :score=>40}, {:name=>"Herr Matsumoto", :score=>50}, {:name=>"Herr Fujisawa", :score=>85}]

#Ich konnte ein Array mit "san" zum Namen erstellen!

Schließlich

Vielen Dank für das Lesen des Artikels.

Ich bin mir sehr bewusst, dass wenn Sie mit Rails entwickeln und die Methode nicht kennen, dies einen großen Einfluss auf die Bandbreite der Möglichkeiten und das Code-Refactoring hat. Ich spüre wieder die Wichtigkeit der Grundlagen.

Wenn Sie Fehler im Inhalt finden, können Sie uns gerne darauf hinweisen und uns Ihre Meinung mitteilen!

Recommended Posts

Ruby-Array-Methoden, die mit Rails verwendet werden können (außer jedem)
Organisieren Sie Methoden, die mit StringUtils verwendet werden können
SwiftUI-Ansicht, die in Kombination mit anderen Frameworks verwendet werden kann
[Rails] "Pry-Rails", die beim Speichern mit der create-Methode verwendet werden können
Bereich, in dem Variablen mit Ruby verwendet werden können [Scope]
Scala String kann nicht nur für java.lang.String-Methoden verwendet werden
Erstellen Sie ein Seitensteuerelement, das mit RecyclerView verwendet werden kann
Firebase-Realtime-Datenbank für Android, die mit Kopie verwendet werden kann
Ruby on Rails 5 - Kurzanleitung zum Lernen, die im Feld Zusammenfassung verwendet werden kann
Ruby-Methoden, die häufig in Rails verwendet werden
Können andere Anweisungen als Schleifen beschriftet werden?
Bis Rubin in Fenstern verwendet werden kann ...
Einfache Implementierung eines Spielautomaten, die mit Kopie verwendet werden kann
Tools zur Leistungsanalyse und Fehlerdiagnose, die mit OpenJDK verwendet werden können
Über die Sache, dass hidden_field wahnsinnig benutzt werden kann
Praktische Tastenkombinationen für Eclipse
Syntax- und Ausnahmebedingungen, die beim Vergleich mit null in Java verwendet werden können
Vier Reihen mit Schwerkraft, die auf der Konsole gespielt werden können
[Rails] Probleme, die mit devise nicht registriert / angemeldet werden können
Statisches Analysetool, das mit GitHub verwendet werden kann [Java-Version]
Erstellen Sie eine Umgebung, in der pip3 mit CentOS7 + Python3 verwendet werden kann
Zusammenfassung von ORM "uroboroSQL", das in Enterprise Java verwendet werden kann
[Ruby on Rails] Posting-Funktion, die nur angemeldete Benutzer posten können
Kraftfertigkeiten, die jederzeit schnell eingesetzt werden können - Reflexion
Zusammenfassung der JDKs, die mit Homebrew installiert werden können (Stand November 2019)
[Java 8] Bis zur Konvertierung von Standardeingaben, die beim Codieren von Tests verwendet werden können, in eine Liste oder ein Array