En CoffeeScript, ¿cómo se agrega un valor a una matriz?


98

¿Cuál es la forma prescrita de agregar un valor a una matriz en CoffeeScript? Revisé el libro de PragProg CoffeeScript, pero solo trata sobre la creación, el corte y el empalme, y la iteración, pero no la adición.

Respuestas:



49

Es mucho mejor utilizar listas por comprensión.

Por ejemplo, en lugar de esto:

things = []
for x in list
  things.push x.color

haz esto en su lugar:

things = (x.color for x in list)

23
Eso no agrega valores de la lista a las cosas. Eso reemplaza la matriz de cosas por completo. Yo también lo probé.
ajsie

Bueno, claro ajsie, tienes razón, lo reemplaza, no lo agrega. Sin embargo, el punto es que, por lo general, cuando estás presionando, a menudo estás haciendo algo parecido a una comprensión de matriz de todos modos. No en todos los casos, es cierto, pero muchas veces.
suranyami

3
@suranyami Por el contrario, no puedo pensar en ningún buen uso para eso. Prefiero hacerlo things = list, es mucho más conciso.
Michael Dorst

@suranyami El enlace está muerto.
derekdreery

@antropomorfo Bueno, por supuesto. Es un ejemplo artificial. Digamos que es algo como esto en su lugar: colors = (item.color for item in list)
suranyami

2

Si está encadenando llamadas, entonces desea que el anexo devuelva la matriz en lugar de su longitud. En este caso, puede usar .concat ([newElement])

Tiene que ser [newElement] ya que concat espera una matriz como la que está concatenando. No es eficiente, pero se ve bien en el entorno adecuado.


Sin embargo, el encadenamiento de llamadas es algo más elegante que puedes hacer, como dijiste "el método no es eficiente": concatdevuelve una nueva matriz construida a partir de los elementos de la matriz A + matriz B. Las referencias a los objetos se mantienen, por lo que los cambios en un objeto referenciado en la matriz A, la matriz B o el resultado concat también se reflejará en las otras matrices.
SidOfc
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.