[Ruby] Schleifenunterscheidung und Verwendung in Ruby

Warum schreiben?

Ich habe while und redo in meinem Unternehmen kombiniert, es so implementiert, dass es sich wiederholt, bis die Bedingungen erfüllt sind, und ich habe den Job in der Produktionsumgebung ausgeführt, also die Ausgabe zum Schreiben einer geeigneten Schleife. (Auch bei Paiza ging es nur um ...)

Zum Zeitpunkt der Codeüberprüfung wurde ich oft gebeten, mit einem Liner neu zu schreiben, daher werde ich, soweit ich verstehen kann, eine Liner-Notation schreiben.

Schleifentypen und Verwendungen

for (Ich glaube nicht, dass es in Ruby viel verwendet wird ...) Die for-Anweisung wird verwendet, wenn Sie die Verarbeitung für den Bereich des angegebenen Bereichsobjekts wiederholen oder die Elemente des Arrays der Reihe nach abrufen möchten.

ruby.rb


for i in 1..3 do
  p "#{i}Zweite Schleife"
end

#=>"1. Schleife"
#=>"Zweite Schleife"
#=>"3. Schleife"

Es ist möglich, die Elemente des Arrays in Ordnung zu bringen, aber ich glaube nicht, dass es viele Leute gibt, für die geschrieben wird, und es gibt keinen Grund, also werde ich es weglassen.

each Es ist jedem in Ruby vertraut.

Jede Methode ist eine Methode, die in Arrays, Bereichsobjekten, Hash und Enumerator verwendet werden kann, und Sie können die im Objekt enthaltenen Elemente der Reihe nach abrufen.

ruby.rb


#Array
[1,2,3].each do |i|
  p "#{i}Zweite Schleife"
end

#Array einen Liner
[1,2,3].each {|i| p "#{i}Zweite Schleife"}

#Bereichsobjekt
(1..3).each do |i|
  p "#{i}Zweite Schleife"
end

#Range Objekt ein Liner
(1..3).each {|i| p "#{i}Zweite Schleife"}

#=>"1. Schleife"
#=>"Zweite Schleife"
#=>"3. Schleife"

"Jedes" wird hauptsächlich verwendet und nicht "für".

while Als nächstes ist während (ich habe es während getan) while-Schleifen, während die angegebene Bedingung erfüllt ist.

Die for-Anweisung und jede Methode durchlaufen die angegebenen Elemente, während die while-Anweisung iteriert, bis der bedingte Ausdruck falsch wird.

ruby.rb


i = 1
while i <= 3 do #do ist optional und funktioniert ohne zu schreiben
  p "#{i}Zweite Schleife"
  i += 1
end

#=>"1. Schleife"
#=>"Zweite Schleife"
#=>"3. Schleife"

Ich denke, es gibt mehr Risiken als jedes oder jedes Mal, das in Zukunft eingeführt wird. Es gibt keine klare und zuverlässige Obergrenze, und Sie legen die Bedingungen selbst fest. Verwenden Sie sie daher systematisch ...

Wenn Sie es verstehen und verwenden, wird es flexibel und wahnsinnig einfach zu bedienen sein.

until Betrachten Sie es als das genaue Gegenteil von while. Es mag nicht sehr nützlich sein, aber vorerst.

ruby.rb


i = 1
until i > 3 do #do ist optional und funktioniert ohne zu schreiben
  p "#{i}Zweite Schleife"
  i += 1
end

#=>"1. Schleife"
#=>"Zweite Schleife"
#=>"3. Schleife"

Der Zustand ist gegenüber dem vorherigen umgekehrt und dreht sich, sofern das vordefinierte i 3 nicht überschreitet. Ich empfehle es nicht, weil es schwer zu verstehen ist, aber wenn Sie den numerischen Wert nicht als Bedingung verwenden, scheint es nützlich zu sein.

loop Dies wird nicht herauskommen, es sei denn, Sie beenden es mit Pause. Sie können flexible Bedingungen festlegen, aber ich denke, dies ist auch eine ziemlich riskante Schleife.

ruby.ruby.rb


i = 1
loop{
  p "#{i}Zweite Schleife"
  i += 1
  break if i == 4
}

#=>"1. Schleife"
#=>"Zweite Schleife"
#=>"3. Schleife"

Wenn die definierte Variable "i" gleich 4 wird, wird sie unterbrochen.

times Ich habe es in letzter Zeit oft benutzt, aber ich mag es wirklich (lacht) Ich denke, dass es am besten ist, es die angegebene Anzahl von Malen zu drehen.

ruby.rb


#Bei Verwendung eines Schleifengradwerts
3.times do |i|
  p i
end

#Einzeiler
3.times {|i| p i}

#=>"0"
#=>"1"
#=>"2"

#Wenn Sie den Schleifengradwert nicht verwenden
3.times do
  p "Es ist eine Schleife, sie dreht sich dreimal"
end

#Einzeiler
3.times {p "Es ist eine Schleife, sie dreht sich dreimal"}

#=>"Es ist eine Schleife, sie dreht sich dreimal"
#=>"Es ist eine Schleife, sie dreht sich dreimal"
#=>"Es ist eine Schleife, sie dreht sich dreimal"

Es wird empfohlen, da es am explizitesten und intuitivsten ist, wenn die angegebene Anzahl von Malen gedreht wird.

upto downto Dies wird auch häufig verwendet, wenn Sie beim Drehen in einer Schleife einen numerischen Wert wünschen. Ich persönlich mag es.

upto ist eine Schleife, bis die angegebene Zahl erreicht ist, in der die Variable um 1 erhöht wird, und downto ist das Gegenteil von upto, eine Schleife, bis die angegebene Zahl erreicht ist, in der die Variable um 1 dekrementiert wird.

ruby.rb


#upto
1.upto(3) do |i|
  p "#{i}Zweite Schleife"
end

#bis zu einem Liner
1.upto(3) {|i| p "#{i}Zweite Schleife"}

#=>"1. Schleife"
#=>"Zweite Schleife"
#=>"3. Schleife"

#downto
3.downto(1) do |i|
  p i
end

#auf einen Liner
3.downto(1) {|i| p i}

#=>3
#=>2
#=>2

map map durchläuft die Blöcke so oft, wie Elemente im Array vorhanden sind, und gibt das resultierende Array zurück. map! wirkt sich nicht auf den ursprünglichen Wert aus, während map! den ursprünglichen Wert neu schreibt. Außerdem verfügt Ruby über eine Sammelmethode, die ein anderer Name für die Kartenmethode ist.

Es ist praktisch, in einem Array zu verarbeiten und das Ergebnis als Array zu erhalten.

ruby.rb


arr = [1, 2, 3]
arr_new = arr.map { |x| x * 2 }
p arr_new

#=>[2, 4, 6]

Unterschied von jedem

Wenn ich mich an Ruby gewöhne, denke ich, dass ich dazu neige, alles in jedes zu schreiben (ich versuche auch, das nicht zu tun). Es gibt jedoch überraschend viele Muster, die bei Verwendung der Karte und nicht bei jedem sauber angewendet werden können.

each.rb


#each
int_list = (1..3).to_a

int_to_double = []
int_list.each do |i|
  int_to_double << i * 2
end

p int_to_double

#=>[2, 4, 6]

Ich definiere ein Array, nur um eine neue Liste zu generieren. Dies geschieht mit Hilfe der Karte ...

map.rb


#map
int_list = (1..3)

int_to_double = int_list.map do |i| 
  i * 2
end

p int_to_double

#Einzeiler
int_list = (1..3)

int_to_double = int_list.map {|i| i * 2}

p int_to_double

#=>[2, 4, 6]

Sie können so ordentlich schreiben.

Schließlich

Darüber hinaus gibt es in Ruby immer noch viele sich wiederholende Syntaxen und Methoden, sodass ich sie nach Überprüfung des Timings erneut hinzufügen werde.

Wenn Sie ein Array verarbeiten und ein neues Array generieren möchten, verwenden Sie map. Wenn Sie den Inhalt des Arrays einzeln herausnehmen und eine bedingte Verzweigung usw. durchführen möchten, verwenden Sie jede Wenn Sie flexible Bedingungen festlegen und eine Schleife ausführen möchten, verwenden Sie while (systematisch verwenden). Wenn Sie die Anzahl der Schleifen im Voraus kennen, stellen Sie die Zeiten ein Wenn Sie einen Wert erhalten möchten, der beim Drehen der Schleife um 1 erhöht oder verringert wird, verwenden Sie upto, downto.

Ich benutze es richtig so.

Es gibt viele Dinge, die Sie beim Drehen der Schleife tun möchten. Der intuitivste Weg ist daher, die intelligente Schleife auszuwählen und zu implementieren.

Recommended Posts

[Ruby] Schleifenunterscheidung und Verwendung in Ruby
Zusammenfassung der Hashes und Symbole in Ruby
Umgang mit Datum und Uhrzeit in Ruby. Verwenden Sie Datum und Uhrzeit richtig.
Behandlung von Zeilenanfang und Zeilenende in regulären Ausdrücken in Ruby
Schreiben Sie Schlüssel und Werte in Ruby
[Rails] Unterschiede und Verwendung von each_with_index und each.with_index
Verzeichnisinformationen von DEFAULT_CERT_FILE in Mac Ruby 2.0.0
Blasensortierung durchführen und mit Ruby sortieren auswählen
Erläuterung der Ruby Time- und Date-Objekte
Grundlegende Verwendung und Codebeispiel für Enum
Unterschied zwischen "|| =" und "instance_variable_defined?" Im Ruby-Memo
Vergleich von JavaScript-Objekten und Ruby-Klassen
Einführung und Verwendungserklärung von Font Awesome
Diskriminierung von Enum in Java 7 und höher
[Einführung in Ruby] Über die Rolle von true und break in der while-Anweisung
[Ruby] Über das Verhalten der Auswertung von bedingten Ausdrücken in while
[Ruby] Schlüsselwörter mit Schlüsselwörtern und Standardwerten von Argumenten
Empfehlung der Serviceklasse in Ruby on Rails
[Verständnis] Unterschied zwischen Hash und Array in Ruby
Fügen Sie CSV-Dateien mit "'" und "" "in Ruby 2.3 in MySQL ein
Grundlagen von Ruby
Ruby on Rails ~ Grundlagen von MVC und Router ~
Lernen Sie den rudimentären Mechanismus und die Verwendung von Gradle 4.4 kennen
[Java] Klassifizierungsnotiz für Kompilierungsfehler und Laufzeitfehler
Zählen Sie eine Teilmenge eines in Ruby angegebenen Arrays auf (+ α).
Rubin und Edelstein
Zum Verständnis von Karte und Flatmap in Stream (1)
[Rails] Rangfolge und Paginierung in der Reihenfolge der Likes
Finden Sie die maximalen und minimalen gemeinsamen Vielfachen einer beliebigen Anzahl von Ganzzahlen in Ruby
Zusammenfassung der häufig verwendeten Befehle in Rails und Docker
Verwendung japanischer Schriftarten und Fremdzeichen in Jasper Report
Verwendung von th: include, th: replace, th: insert, th: fragment in Thymeleaf
[Ruby] Die Rolle von Indizes beim Lernen von Elementen in Arrays
Unterschiede zwischen Klassen und Instanzen in Ruby
Tatsächlich unterscheidet Ruby zwischen Zeilenumbrüchen und Leerzeichen
Verknüpfte HashMap, auf die in der Reihenfolge des Einfügens verwiesen wird, und deren Verwendungsbeispiel
Verwendbarkeit von Datums- und Zeitklasse in jeder Sprache
[Ruby] Schwierigkeiten beim Refactoring logischer Operatoren (Genauigkeit und Lesbarkeit)
Umgang mit TSV-Dateien und CSV-Dateien in Ruby
[Technisches Memo] Über die Vor- und Nachteile von Ruby
Verwendung von Abstract Class und Interface in Java richtig
[Ruby] Klassenverschachtelung, Vererbung und die Grundlagen des Selbst
Rufen Sie die URL des HTTP-Umleitungsziels in Ruby ab
Symbole und zerstörerischer Rubin
[Ruby] Big Decimal und DECIMAL
Minimaler Einsatz von Mockito
Definition der Rubinmethode