Je sais que les rails ont des méthodes de tri intégrées à ActiveCord, mais je suis juste en train d'écrire un script rubis clair et d'aimer de trier les enregistrements d'un tableau par date. P>
La date serait stockée dans l'une des cellules de la matrice multidimensionnelle. P>
Quelle est la meilleure façon pour moi de m'approcher cela, je peux donc arriver au point où je viens de faire Je n'ai pas à utiliser la méthode pensées? p> trier_by_date code> et j'indique soit ASC code> ou desc < / code>? p>
trier_by_date code>, mais j'aimerais pouvoir appeller facilement une méthode sur la collection et obtenir les résultats que je veux. P>
5 Réponses :
quelque chose comme ça?
class Array
def sort_by_date(direction="ASC")
if direction == "ASC"
self.sort
elsif direction == "DESC"
self.sort {|a,b| b <=> a}
else
raise "Invalid direction. Specify either ASC or DESC."
end
end
end
def sort_by_date(dates, direction="ASC") sorted = dates.sort sorted.reverse! if direction == "DESC" sorted end
C'est une solution intriguante ... merci!
Ce qui suit pourrait ne pas fonctionner pour l'objet de date, mais devrait fonctionner pour des objets DateTime. En effet, les objets DateTime peuvent être convertis en entiers.
J'ai récemment dû faire un tri descendant pour des objets DateTime et c'est ce que j'ai proposé. P>
def sort_by_datetime(dates, direction="ASC")
dates.sort_by { |date| direction == "DESC" ? -date.to_i : date }
end
Notez que datetime # to_i code> est une extension de support active. Ce n'est pas dans le noyau de rubis.
La façon dont je le fais en ce moment est maintenant:
@collection.sort! { |a,b| DateTime.parse(a['date']) <=> DateTime.parse(b['date']) }
Utilisation de #sort_by code> convertit implicitement les valeurs en fonction du bloc. Donc, cela utilisera plus de mémoire, mais cela ne va pas d'analyser toutes les comparaisons.
J'utilise une ancienne version des rails et Rabl code> et cela fonctionne pour moi
essayez quelque chose et publier ce que vous avez obtenu, de préférence un code qui peut être exécuté de manière indépendante, en d'autres termes, vous montrer le code
Je suppose que vous voulez quelque chose comme: arr.sort_by {| x | x.date}