Als Randnotiz, wenn Sie in Rails sind, können Sie einfach tun'Smith'.first
Walking Wiki
Ruby 1.9+ hat"Smith".chr #=> "S"
Tyler James Young
Antworten:
128
Sie können die offenen Klassen von Ruby verwenden, um Ihren Code besser lesbar zu machen. Zum Beispiel:
classStringdef initial
self[0,1]endend
Mit dieser initialMethode können Sie die Methode für jede Zeichenfolge verwenden. Wenn Sie also die folgenden Variablen haben:
last_name ="Smith"
first_name ="John"
Dann können Sie die Initialen sehr sauber und lesbar erhalten:
puts first_name.initial # prints J
puts last_name.initial # prints S
Die andere hier erwähnte Methode funktioniert nicht mit Ruby 1.8 (nicht, dass Sie 1.8 sowieso nicht mehr verwenden sollten! - aber als diese Antwort veröffentlicht wurde, war sie immer noch recht verbreitet):
puts 'Smith'[0]# prints 83
Wenn Sie dies nicht regelmäßig tun, kann das Definieren der Methode natürlich übertrieben sein, und Sie können es einfach direkt tun:
Beachten Sie, dass dies nur in ruby19 funktioniert. in ruby18 "Smith"[0]würde den ganzzahligen Wert des Zeichens 'S' zurückgeben. Beide Versionen gehorchen "Smith"[0,1] == "S".
Rampion
@rampion: Sicher, aber die Frage enthält keinen Hinweis darauf, dass das OP nicht die neueste Version verwendet. Warum also die Dinge komplizieren?
Jörg W Mittag
4
Ruby 1.8 ist kein Vermächtnis! Die Ruby 1.8-Linie wird weiterhin unterstützt und es wird höchstwahrscheinlich eine Version 1.8.8 veröffentlicht. Darüber hinaus unterstützen weder JRuby noch Rubinius noch 1.9. Ich würde 5 $ wetten, dass es heute weit mehr Benutzer von 1,8 als 1,9 gibt.
Marc-André Lafortune
3
@ Jörg: Die Antwort "Smith"[0,1]funktioniert auf 1.8 (unter der Annahme von ASCII). Ich bin mir nicht sicher, warum Sie so viel über den Antragsteller und über alle anderen annehmen, die aus dieser Frage lernen möchten. Mac OS X wird beispielsweise mit Ruby 1.8 geliefert, sodass für diese Benutzer keine Installation erforderlich ist.
Marc-André Lafortune
3
Wie würden Sie die Initiale des Namens 'Ångström' (in UTF-8) erhalten, damit sie sowohl in Ruby 1.8.x als auch in 1.9.x wie erwartet funktioniert? Keine der vorgeschlagenen Methoden würde in 1.8.x funktionieren.
Lars Haugseth
30
"Smith"[0..0]
funktioniert sowohl in Ruby 1.8 als auch in Ruby 1.9.
Beachten Sie, dass dies nur in ruby19 funktioniert. in ruby18 "Smith"[0]würde den ganzzahligen Wert des Zeichens 'S' zurückgeben. Beide Versionen gehorchen "Smith"[0,1] == "S".
Rampion
1
@ Rampion: in der Tat. Ich würde hinzufügen, dass "Smith"[0] == ?Sdies sowohl für Ruby 1.8 als auch für 1.9 gilt
Marc-André Lafortune
2
Aufgrund einer nervigen Designauswahl in Ruby vor 1.9 - some_string[0]gibt den Zeichencode des ersten Zeichens zurück - ist die portabelste Methode, dies zu schreiben some_string[0,1], die Anweisung, eine Teilzeichenfolge bei Index 0 zu erhalten, die 1 Zeichen lang ist.
str [0,1] funktioniert auch in 1.8 und 1.9 nicht gleich, da im ersten das erste Byte zurückgegeben wird, während im zweiten das erste Zeichen zurückgegeben wird .
Lars Haugseth
1
Das ist nicht wirklich ein Unterschied in der Funktionsweise der Indizierung, sondern in der Unterstützung von 1.9 für Multibyte-Sprachen. Sie sollen beide das erste Zeichen zurückgeben, aber 1.8 hat eine naivere Sicht auf das, was ein "Zeichen" ist.
Chuck
2
Eine weitere Option, die noch nicht erwähnt wurde:
Keine dieser Methoden wird mit dieser Arbeit .nach name. Und der letzte ist unsinnig, selbst wenn Sie den entfernen ., weil er zwei verschiedene Methoden verwendet, um dasselbe zu tun - [0]undchr() .
'Smith'.first
"Smith".chr #=> "S"
Antworten:
Sie können die offenen Klassen von Ruby verwenden, um Ihren Code besser lesbar zu machen. Zum Beispiel:
Mit dieser
initial
Methode können Sie die Methode für jede Zeichenfolge verwenden. Wenn Sie also die folgenden Variablen haben:Dann können Sie die Initialen sehr sauber und lesbar erhalten:
Die andere hier erwähnte Methode funktioniert nicht mit Ruby 1.8 (nicht, dass Sie 1.8 sowieso nicht mehr verwenden sollten! - aber als diese Antwort veröffentlicht wurde, war sie immer noch recht verbreitet):
Wenn Sie dies nicht regelmäßig tun, kann das Definieren der Methode natürlich übertrieben sein, und Sie können es einfach direkt tun:
quelle
Wenn Sie eine neuere Version von Ruby (1.9.0 oder höher) verwenden, sollte Folgendes funktionieren:
Wenn Sie entweder 1.9.0+ oder 1.8.7 verwenden, sollte Folgendes funktionieren:
Wenn Sie eine Version verwenden, die älter als 1.8.7 ist, sollte dies funktionieren:
Beachten Sie, dass
'Smith'[0,1]
dies unter 1.8 nicht funktioniert. Sie erhalten nicht das erste Zeichen, sondern nur das erste Byte .quelle
"Smith"[0]
würde den ganzzahligen Wert des Zeichens 'S' zurückgeben. Beide Versionen gehorchen"Smith"[0,1] == "S"
."Smith"[0,1]
funktioniert auf 1.8 (unter der Annahme von ASCII). Ich bin mir nicht sicher, warum Sie so viel über den Antragsteller und über alle anderen annehmen, die aus dieser Frage lernen möchten. Mac OS X wird beispielsweise mit Ruby 1.8 geliefert, sodass für diese Benutzer keine Installation erforderlich ist.funktioniert sowohl in Ruby 1.8 als auch in Ruby 1.9.
quelle
Der Vollständigkeit halber gibt Ruby 1.9 String # chr das erste Zeichen eines Strings zurück. Es ist immer noch in 2.0 und 2.1 verfügbar.
http://ruby-doc.org/core-1.9.3/String.html#method-i-chr
quelle
In der MRT 1.8.7 oder höher:
quelle
In Schienen
quelle
Versuche dies:
ODER
quelle
quelle
"Smith"[0]
würde den ganzzahligen Wert des Zeichens 'S' zurückgeben. Beide Versionen gehorchen"Smith"[0,1] == "S"
."Smith"[0] == ?S
dies sowohl für Ruby 1.8 als auch für 1.9 giltAufgrund einer nervigen Designauswahl in Ruby vor 1.9 -
some_string[0]
gibt den Zeichencode des ersten Zeichens zurück - ist die portabelste Methode, dies zu schreibensome_string[0,1]
, die Anweisung, eine Teilzeichenfolge bei Index 0 zu erhalten, die 1 Zeichen lang ist.quelle
Eine weitere Option, die noch nicht erwähnt wurde:
quelle
Sie können auch verwenden
truncate
oder für zusätzliche Formatierung:
quelle
Jede dieser Methoden funktioniert:
quelle
.
nachname
. Und der letzte ist unsinnig, selbst wenn Sie den entfernen.
, weil er zwei verschiedene Methoden verwendet, um dasselbe zu tun -[0]
undchr()
.