Ich versuche, eine Methode zu erstellen, die die Funktionalität von Enumerables sort
Methode verwendet.So überschreiben Sie die Sortiermethode Enumerables
Imagine Ich habe diese Daten
data = [{project: 'proj', version: '1.1'}, {project: 'proj2', version: '1.11'}, {project: 'proj3', version: '1.2'}]
Ich möchte das Verfahren so nennen können:
data.natural_sort{|a,b| b[:version] <=> a[:version] }
Der eigentliche Aufruf, die so etwas wie dies würde erreichen passiert:
data.sort{|a,b| MyModule.naturalize_str(b[:version]) <=> MyModule.naturalize_str(a[:version]) }
Heres mein aktueller gebrochener Code:
Enumerable.module_eval do
def natural_sort(&block)
if !block_given?
block = Proc.new{|a,b| Rearmed.naturalize_str(a[:version]) <=> Rearmed.naturalize_str(b[:version])}
end
sort do |a,b|
a = Rearmed.naturalize_str(a)
b = Rearmed.naturalize_str(b)
block.call(a,b)
end
end
end
Es wirft einen Fehler, weil a und b die Hashes statt der Versionen sind, die ich wollte.
Tatsächlich gibt es nun zwei weitere Möglichkeiten zu sortieren: 'arr.min (arr.size)' und 'arr.min_by (arr.size) {...}'. :-) –
@CarySwoveland Das ist ein Sortier/Abhol-Deal, aber es folgt auch dem gleichen Stil mit einer a/b-Version und einem, der individuelle Transformationen durchführt. – tadman
Ich habe bereits die Methode natural_sort_by, aber ich versuche auch, die Sortiermethode zu implementieren. –