Ruby - So wählen Sie einige Zeichen aus der Zeichenfolge aus

73

Ich versuche eine Funktion für die Auswahl zu finden, z. B. die ersten 100 Zeichen der Zeichenfolge. In PHP gibt es die substr- Funktion

Hat Ruby eine ähnliche Funktion?

user1946705
quelle

Antworten:

139

Versuchen Sie foo[0...100], jeder Bereich reicht aus. Bereiche können auch negativ werden. Es ist in der Dokumentation von Ruby gut erklärt .

Trauer
quelle
9
foo [0,100] ist das gleiche.
Steenslag
25
Beachten Sie auch, dass foo[0..100]und foo[0...100]unterschiedlich sind. Einer ist null bis einhundert, während der andere null bis neunundneunzig ist.
Caley Woods
11
Klarstellung oben: foo [0..100] ist das Inklusive (0 bis 100) und foo [0 ... 100] ist das Exklusive (0 bis 99)
OneHoopyFrood
2
Und den Vorschlag von @ steenslag zu verdeutlichen, foo[0,100]ist ebenfalls exklusiv .
Joshua Pinter
40

Verwenden des []Operators ( docs ):

foo[0, 100]  # Get 100 characters starting at position 0
foo[0..99]   # Get all characters in index range 0 to 99 (inclusive!)
foo[0...100] # Get all characters in index range 0 to 100 (exclusive!)

Update für Ruby 2.7 : Beginless-Bereiche sind jetzt hier (Stand: 25.12.2019) und wahrscheinlich die kanonische Antwort für "Rückgabe des ersten xx eines Arrays":

foo[...100]  # Get all chars from the beginning up until the 100th (exclusive)

Verwenden der .sliceMethode ( docs ):

foo.slice(0, 100)  # Get 100 characters starting at position 0
foo.slice(0...100) # Behaves the same as operator [] 

Und der Vollständigkeit halber:

foo[0]         # Returns the indexed character, the first in this case
foo[-100, 100] # Get 100 characters starting at position -100
               # Negative indices are counted from the end of the string/array
               # Caution: Negative indices are 1-based, the last element is -1
foo[-100..-1]  # Get the last 100 characters in order
foo[-1..-100]  # Get the last 100 characters in reverse order
foo[-100...foo.length] # No index for one beyond last character

Update für Ruby 2.6 : Endlose Bereiche sind jetzt verfügbar (Stand: 25.12.2018)!

foo[0..]      # Get all chars starting at the first. Identical to foo[0..-1]
foo[-100..]   # Get the last 100 characters
Christopher Oezbek
quelle
1
Danke dafür. Es ist hilfreich, die verschiedenen Nuancen mit dem Operator [] zu sehen, nicht nur unbedingt die richtige Antwort.
Johngraham