2010-01-10 7 views
16

Me gusta unirme a una matriz que da como resultado una 'lista en inglés'. Por ejemplo, ['one', 'two', 'three'] debe dar como resultado 'one, two and three'.Unir los contenidos de la matriz en una 'lista en inglés'

que escribió el código para lograrlo (suponiendo que la matriz no está vacía, lo cual no es el caso en mi situación)

if array.length == 1 
    result = array[0] 
else 
    result = "#{array[0, array.length].join(', ')} and #{array.last}" 
end 

pero me preguntaba si existe alguna 'avanzada' se unen método para lograr este comportamiento? ¿O al menos un código más corto/mejor?

+0

preguntándome, ¿este proyecto es euler? – Anurag

+1

Así que se pregunta "¿Hay un método de combinación que utiliza un delimitador para la mayoría de las cosas, pero uno diferente para el último elemento"? ¿Qué propósito tendría eso en una biblioteca principal? –

+0

@Anurag no, no es project euler (no he visto una pregunta así, pero fue hace bastante tiempo que la miré), pero a pesar de que sería solucionada por mi código, supongo, así que no hay necesidad de preguntar ? – Veger

Respuesta

39

Este método no existe en el núcleo Ruby.

Se tiene sido implemented en Rails biblioteca de soporte activo, sin embargo:

['one', 'two', 'three'].to_sentence 
#=> "one, two, and three" 

Los delimitadores son configurables, y también se utiliza Rails I18n por defecto.

Si usa ActiveSupport o Rails, esta sería la forma preferida de hacerlo. Si su aplicación no es Railsy, ​​su implementación parece adecuada para fines solo en inglés.

+0

Gracias, esto es exactamente lo que estaba buscando. No sabía que dicho método se implementaría en Rails (y no en Ruby) o habría agregado un comentario de que estaba usando Rails – Veger

+0

. El enlace está roto. Y solo para elegir realmente, su versión tiene una coma de Oxford (la coma entre dos y tres), mientras que OP no lo hace. –

+0

Gracias, el enlace ha sido actualizado. Los delimitadores son configurables como he mencionado. Acabo de mostrar el valor predeterminado. – molf

8

Al igual que una pista de legibilidad. Puede escribir

array[0...-1] 

para seleccionar todo menos el último elemento.

Edite y actualice el código del ejemplo con la sugerencia de Nick.

+0

No sabía eso (todavía soy nuevo para Ruby), pero de hecho es mejor legible – Veger

+0

Todos somos aprendices. Me alegro de poder ayudar. – akuhn

+1

O 'matriz [0 ...- 1]' – Nick

Cuestiones relacionadas