Ruby Range

Bereiche sind überall: von a bis z, von 0 bis 9 und so weiter. Ruby unterstützt Bereiche und erlaubt uns, Bereiche auf verschiedene Weise zu verwenden:

  • Bereiche als Sequenzen
  • Bereiche als Bedingungen
  • Bereiche als Intervalle

Bereiche als Sequenzen

Die erste und häufigste Verwendung von Bereichen ist der Ausdruck von Sequenzen. Sequenzen haben einen Startpunkt, einen Endpunkt und eine Möglichkeit, aufeinanderfolgende Werte in der Sequenz zu erzeugen.

Ruby verwendet''..''und''...''Bereichsoperatoren, um diese Sequenzen zu erstellen. Die Zwei-Punkt-Form erstellt einen Bereich, der den angegebenen höchsten Wert einschließt, und die Drei-Punkt-Form erstellt einen Bereich, der den angegebenen höchsten Wert nicht einschließt.

(1..5) #==> 1, 2, 3, 4, 5 (1...5) #==> 1, 2, 3, 4 ('a'..'d') #==> 'a', 'b', 'c', 'd'

Die Sequenz 1..100 ist einRange-Objekt, das zweiFixnum-Referenzen auf Objekte enthält. Bei Bedarf können Sieto_a-Methode verwenden, um den Bereich in eine Liste umzuwandeln. Probieren Sie das folgende Beispiel:

Beispiel

#!/usr/bin/ruby $, =", " #Trennzeichen für Array-Werte range1 = (1..10).to_a range2 = ('bar'..'bat').to_a puts "#{range1}" puts "#{range2}"

Ausprobieren »

Die Ausgabe des obigen Beispiels ist:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
["bar", "bas", "bat"]

Ranges implementieren Methoden, mit denen Sie über sie iterieren und ihre Inhalte auf verschiedene Weise überprüfen können:

Beispiel

#!/usr/bin/ruby # -*- coding: UTF-8 -*- #Angegebener Bereich digits = 0..9 puts digits.include?(5) ret = digits.min puts "Der Mindestwert ist #{ret}" ret = digits.max puts "Der Höchstwert ist #{ret}" ret = digits.reject {|i| i < 5 } puts "Diejenigen, die die Bedingung nicht erfüllen, sind #{ret}" digits.each do |digit| puts "In der Schleife #{digit}" end

Ausprobieren »

Das Ausführen des obigen Beispiels ergibt:

true
最小值为 0
最大值为 9
不符合条件的有 [5, 6, 7, 8, 9]
在循环中 0
在循环中 1
在循环中 2
在循环中 3
在循环中 4
在循环中 5
在循环中 6
在循环中 7
在循环中 8
在循环中 9

Bereiche als Bedingungen

Bereiche können auch als Bedingungsausdrücke verwendet werden. Zum Beispiel gibt das folgende Codefragment Zeilen von der Standardeingabe aus, wobei die erste Zeile jeder Gruppe das Wortstartenthält und die letzte Zeile das Wortend enthält.:

while gets print if /start/../end/ end

Bereiche können in case-Anweisungen verwendet werden:

Beispiel

#!/usr/bin/ruby # -*- coding: UTF-8 -*- score = 70 result = case score when 0..40 "Poor score" when 41..60 "Almost passing" when 61..70 "Passing score" when 71..100 "Good score" else "Invalid score" end puts result

Ausprobieren »

Das obige Beispiel gibt aus:

Passing score

Bereiche als Intervalle

Die letzte Verwendung von Bereichen ist die Intervallerkennung: Überprüfen, ob ein angegebener Wert in einen angegebenen Bereich fällt. Dies erfordert den Gleichheitsoperator ===, um die Berechnung durchzuführen.

Beispiel

#!/usr/bin/ruby # -*- coding: UTF-8 -*- if ((1..10) === 5) puts "5 in (1..10)" end if (('a'..'j') === 'c') puts "c in ('a'..'j')" end if (('a'..'j') === 'z') puts "z in ('a'..'j')" end

Ausprobieren »

Das obige Beispiel gibt aus:

5 在 (1..10)
c 在 ('a'..'j')
Andere Erweiterungen