Como nota al margen, si estás en Rails, puedes hacerlo'Smith'.first
Walking Wiki
Ruby 1.9+ tiene"Smith".chr #=> "S"
Tyler James Young
Respuestas:
128
Puedes usar las clases abiertas de Ruby para hacer tu código mucho más legible. Por ejemplo, esto:
classStringdef initial
self[0,1]endend
le permitirá utilizar el initialmétodo en cualquier cadena. Entonces, si tiene las siguientes variables:
last_name ="Smith"
first_name ="John"
Entonces puede obtener las iniciales de manera muy limpia y legible:
puts first_name.initial # prints J
puts last_name.initial # prints S
El otro método mencionado aquí no funciona en Ruby 1.8 (¡no es que deba seguir usando 1.8 de todos modos! - pero cuando se publicó esta respuesta, todavía era bastante común):
puts 'Smith'[0]# prints 83
Por supuesto, si no lo está haciendo de forma regular, entonces definir el método podría ser excesivo y podría hacerlo directamente:
tenga en cuenta que esto solo funciona en ruby19. en ruby18 "Smith"[0]devolvería el valor entero del carácter 'S'. Ambas versiones obedecen "Smith"[0,1] == "S".
rampion
@rampion: Claro, pero no hay indicios en la pregunta de que el OP no use la versión más reciente, así que ¿por qué molestarse en complicar las cosas?
Jörg W Mittag
4
¡Ruby 1.8 no es un legado! La línea Ruby 1.8 todavía es compatible y lo más probable es que se publique una versión 1.8.8. Además, ni JRuby ni Rubinius son compatibles con 1.9. Apostaría 5 $ a que hoy en día hay muchos más usuarios de 1.8 que de 1.9.
Marc-André Lafortune
3
@ Jörg: La respuesta "Smith"[0,1]funciona en 1.8 (asumiendo ASCII). No estoy seguro de por qué asume tanto sobre el solicitante, así como sobre todos los demás a los que les gustaría aprender de esa pregunta. Por ejemplo, Mac OS X viene con Ruby 1.8, por lo que no se requiere instalación para estos usuarios.
Marc-André Lafortune
3
¿Cómo obtendría la inicial del nombre 'Ångström' (en UTF-8) para que funcione como se espera en Ruby 1.8.xy 1.9.x? Ninguno de los métodos sugeridos funcionaría en 1.8.x.
tenga en cuenta que esto solo funciona en ruby19. en ruby18 "Smith"[0]devolvería el valor entero del carácter 'S'. Ambas versiones obedecen "Smith"[0,1] == "S".
rampion
1
@rampion: de hecho. Yo agregaría que eso "Smith"[0] == ?Ses cierto tanto en Ruby 1.8 como en 1.9
Marc-André Lafortune
2
Debido a una elección de diseño molesta en Ruby antes de 1.9, some_string[0]devuelve el código de carácter del primer carácter, la forma más portátil de escribir esto es some_string[0,1], que le dice que obtenga una subcadena en el índice 0 de 1 carácter de longitud.
str [0,1] tampoco funciona igual en 1.8 y 1.9, ya que en el primero devuelve el primer byte mientras que en el segundo devuelve el primer carácter .
Lars Haugseth
1
Eso no es realmente una diferencia en cómo funciona la indexación tanto como en el soporte de 1.9 para lenguajes multibyte. Ambos están destinados a devolver el primer carácter, pero 1.8 tiene una visión más ingenua de lo que es un "personaje".
Ninguno de estos métodos funcionará con eso .después name. Y el último no tiene sentido incluso si elimina el ., porque utiliza dos métodos diferentes para hacer lo mismo: [0]ychr() .
'Smith'.first
"Smith".chr #=> "S"
Respuestas:
Puedes usar las clases abiertas de Ruby para hacer tu código mucho más legible. Por ejemplo, esto:
le permitirá utilizar el
initial
método en cualquier cadena. Entonces, si tiene las siguientes variables:Entonces puede obtener las iniciales de manera muy limpia y legible:
El otro método mencionado aquí no funciona en Ruby 1.8 (¡no es que deba seguir usando 1.8 de todos modos! - pero cuando se publicó esta respuesta, todavía era bastante común):
Por supuesto, si no lo está haciendo de forma regular, entonces definir el método podría ser excesivo y podría hacerlo directamente:
fuente
Si usa una versión reciente de Ruby (1.9.0 o posterior), lo siguiente debería funcionar:
Si usa 1.9.0+ o 1.8.7, lo siguiente debería funcionar:
Si usa una versión anterior a 1.8.7, esto debería funcionar:
Tenga en cuenta que
'Smith'[0,1]
no no funciona en 1.8, será no darle el primer carácter, que sólo le dará el primer byte .fuente
"Smith"[0]
devolvería el valor entero del carácter 'S'. Ambas versiones obedecen"Smith"[0,1] == "S"
."Smith"[0,1]
funciona en 1.8 (asumiendo ASCII). No estoy seguro de por qué asume tanto sobre el solicitante, así como sobre todos los demás a los que les gustaría aprender de esa pregunta. Por ejemplo, Mac OS X viene con Ruby 1.8, por lo que no se requiere instalación para estos usuarios.funciona tanto en ruby 1.8 como en ruby 1.9.
fuente
En aras de la integridad, desde Ruby 1.9 String # chr devuelve el primer carácter de una cadena. Todavía está disponible en 2.0 y 2.1.
http://ruby-doc.org/core-1.9.3/String.html#method-i-chr
fuente
En MRI 1.8.7 o superior:
fuente
En rieles
fuente
Prueba esto:
O
fuente
fuente
"Smith"[0]
devolvería el valor entero del carácter 'S'. Ambas versiones obedecen"Smith"[0,1] == "S"
."Smith"[0] == ?S
es cierto tanto en Ruby 1.8 como en 1.9Debido a una elección de diseño molesta en Ruby antes de 1.9,
some_string[0]
devuelve el código de carácter del primer carácter, la forma más portátil de escribir esto essome_string[0,1]
, que le dice que obtenga una subcadena en el índice 0 de 1 carácter de longitud.fuente
Otra opción que aún no se ha mencionado:
fuente
También puedes usar
truncate
o para formato adicional:
fuente
Cualquiera de estos métodos funcionará:
fuente
.
despuésname
. Y el último no tiene sentido incluso si elimina el.
, porque utiliza dos métodos diferentes para hacer lo mismo:[0]
ychr()
.