Digamos que tengo una matriz Ruby
a = [1, 2, 3, 4]
Si quiero todo menos el primer elemento, puedo escribir a.drop(1)
, lo cual es genial. Sin embargo, si quiero todo menos el último elemento, solo puedo pensar de esta manera
a[0..-2] # or
a[0...-1]
pero ninguno de estos parece tan limpio como el uso drop
. ¿Alguna otra forma incorporada que me falta?
Respuestas:
Quizás...
o
o
o
que devolverá el último y dejará la matriz con todo lo anterior
o hacer que la computadora funcione para la cena:
o
fuente
Array
parece ser el mejor enfoque para mí. La mayoría de los proyectos terminan con uncore_ext.rb
archivo con pequeñas extensiones como esta. Algunas bibliotecas son prácticamente todas las extensiones como esta:ActiveSupport
por ejemplo.clip
método a la comunidad Ruby? Realmente creo que esto debería estar allí, y el parche de monos es lo incorrecto .a.reverse.drop(1).reverse
estrategia ;-)Por curiosidad, ¿por qué no te gusta?
a[0...-1]
? Desea obtener un segmento de la matriz, por lo que el operador de segmento parece la opción idiomática.Pero si necesita llamar a esto por todas partes, siempre tiene la opción de agregar un método con un nombre más amigable a la clase Array, como sugiere DigitalRoss. Quizás así:
fuente
drop_last
por cierto ....
?nil
:[][1..-1]
->nil
,[][0...-1]
->[]
Otro truco genial
fuente
a, *b = [1,2,3]
que nos dejaría mirar la matriz de una manera clásica de auto / cdr.Si desea realizar una
pop()
operación en una matriz (que dará como resultado el último elemento eliminado), pero está interesado en obtener la matriz en lugar de un elemento emergente, puede usartap(&:pop)
:fuente
Lo hago así:
fuente
¿Qué tal aumentar el método de caída en sí mismo, por ejemplo así?
Luego puede usar un tamaño negativo para eliminar elementos del final, así:
fuente
a[0...-1]
Parece la mejor manera. La sintaxis de corte de matriz se creó exactamente para este propósito ...Alternativamente, si no le importa modificar la matriz en su lugar, simplemente puede llamar
a.pop
:fuente
b = a.pop
Para deshacerse del último elemento en una línea con el resto regresando
Hablando en serio,
fuente
Esta es la forma:
Pero expliquemos cómo funciona esto:
El siguiente ejemplo devolverá todos los registros, desde la posición 0 hasta el último
El siguiente ejemplo devolverá los registros de 1 posición al último
Y aquí tienes lo que necesitas. El siguiente ejemplo devolverá los registros de la posición 0 a last-1
fuente
-2
lugar de-1-1
.a[0...-1]
(observe el tercer punto) y obtener el mismo resultado quea[0..-1-1]
, porque el tercer punto le dice que excluya el elemento final. Vea esto para más detalles.¿Has intentado "tomar"
fuente
a.take(a.size - 1)
; Sí, consideré esta opción.Respuesta:
a.τwτ
pero primero debes instalar Pyper ...Introducción de Pyper: ¿Conoces a Lispy
car
ycdr
devuelve "primero" y "resto" de la matriz? Solo para las necesidades como la suya, hice una extensión de este mecanismo Lispy. Se llamapyper
y le permite acceder también a la 2da, descansar de la 2da, 3ra, descansar de la 3d y también la última, todo excepto la última, etc. Eso no sería mucho sobre lo que escribir, pero también permite la composición de letras, al igual quecaar
,cadr
,cdadar
etc. conocido de Lisp:y finalmente, la respuesta a tu pregunta:
Hay más:
Composiciones
También hay más caracteres de comando que solo
a..f
,u..z
y0..9
, más notablementem
, significa mapa:Pero otros caracteres de comando son demasiado calientes y no muy fáciles de usar en este momento.
fuente
Esto crea una nueva matriz con todos menos los últimos elementos del original:
Tenga en cuenta que algunos otros han sugerido usar #pop. Si está bien modificando la matriz en su lugar, está bien. Si no está de acuerdo con eso, duplique la matriz primero, como en este ejemplo.
fuente
A menudo me encuentro con ganas de todos menos los últimos n elementos de una matriz. He preparado mi propia función para hacer esto de una manera que me parece más legible que otras soluciones:
Ahora puedes hacer lo siguiente:
Deliberadamente he permitido el ArgumentError para que la persona que llama sea responsable de cómo usan este método. Me encantaría escuchar comentarios / críticas de este enfoque.
fuente
fuente