Ho una matrice di oggetti che ho bisogno di ordinare da un attributo di posizione che potrebbe essere un intero o nullo, e ho bisogno degli oggetti che hanno la posizione nil essere alla fine della serie. Ora, posso forzare la posizione a restituire un valore piuttosto che nil in modo che l'array.sort non abbia esito negativo, ma se uso 0 come predefinito, mette gli oggetti in cima all'ordinamento. Qual è il modo migliore per fare questo genere? dovrei semplicemente impostare i valori nulli su un numero incredibilmente alto che è quasi sempre garantito alla fine? o c'è un altro modo in cui potrei causare il metodo array.sort per mettere gli oggetti nil degli attributi alla fine dell'array? il codice è simile al seguente:ordinamento di una matrice ruby di oggetti con un attributo che potrebbe essere nil
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
ora, se faccio la cosa 'altra' come 1000000000, allora è più probabile intenzione di metterli alla fine della matrice, ma non mi piace questa soluzione in quanto è arbitraria
Sarei un po 'incerto su questo perché limita la tua capacità di ordinare su qualsiasi altra cosa senza essere incoerente. Detto questo, se la posizione è l'ordinamento naturale per genitore, allora ha un ragionevole senso di farlo in questo modo. – RHSeeger
@RHSeeger Se si controlla la cronologia delle modifiche, in origine avevo aggiunto un avvertimento su cosa fare se fosse necessario ordinare secondo criteri diversi, ma era formulato in modo confuso e non pensavo che aggiungesse molto. Fondamentalmente, puoi aggiungere altri metodi di confronto che sono nominati come vuoi, e se hai bisogno di ordinarli, fallo in un blocco come nell'esempio originale. –