Tengo una matriz de objetos que necesito ordenar por un atributo de posición que podría ser un entero o nulo, y necesito los objetos que tienen la posición nula para estar al final de la matriz. Ahora, puedo forzar a la posición a devolver algún valor en lugar de cero para que array.sort no falle, pero si uso 0 como este valor predeterminado, coloca esos objetos al frente del ordenamiento. ¿Cuál es la mejor manera de hacer este tipo? ¿Debería simplemente establecer los valores nulos en algún número ridículamente alto que esté "casi" siempre garantizado al final? o ¿hay alguna otra manera en que podría causar que el método array.sort coloque los objetos con atributos nil al final de la matriz? el código es el siguiente:ordenando una matriz de objetos ruby por un atributo que podría ser nulo
class Parent
def sorted_children
children.sort{|a, b| a.position <=> b.position}
end
end
class Child
def position
category ? category.position : #what should the else be??
end
end
Ahora, si hago el algo 'otro' como 1000000000, entonces es más probable que va a poner en el final de la matriz, pero no me gusta esta solución, ya que es arbitraria
Sería algo dudoso en esto, ya que limita su capacidad para ordenar cualquier otra cosa sin ser inconsistente. Dicho esto, si la posición es el orden natural de los padres, entonces tiene sentido razonable hacerlo de esta manera. – RHSeeger
@RHSeeger Si comprueba el historial de edición, originalmente había agregado una advertencia sobre qué hacer si necesita ordenar por diferentes criterios, pero estaba redactado de forma confusa y no creo que haya agregado demasiado. Básicamente, puede agregar otros métodos de comparación que tengan el nombre que desee, y si necesita ordenarlos, hágalo en un bloque como el ejemplo original. –