0
Enumerablesのsort
メソッドの機能を使用するメソッドを作成しようとしています。オーバーライド方法Enumerablesソート方法
私はこのようなメソッドを呼び出すことができるようにしたい私は、このデータを持っている
data = [{project: 'proj', version: '1.1'}, {project: 'proj2', version: '1.11'}, {project: 'proj3', version: '1.2'}]
を想像してみて:
data.natural_sort{|a,b| b[:version] <=> a[:version] }
このような何かを達成するであろうが起こる実際の呼び出し:
data.sort{|a,b| MyModule.naturalize_str(b[:version]) <=> MyModule.naturalize_str(a[:version]) }
を
私の現在の壊れたコード:
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
私が望むバージョンではなく、aとbがハッシュであるため、エラーが発生します。
は実際には、並べ替えるには、2つのより多くの方法が存在することになります: 'arr.min(arr.size)'と 'arr.min_by(arr.size){...}'となります。 :-) –
@CarySwovelandこれはソート/フェッチの取引ですが、a/bバージョンと同じスタイルにも、個々の変換も行います。 – tadman
私はすでにnatural_sort_byメソッドを持っていますが、ソートメソッドも実装しようとしています。 –