0
我试图创建一个使用枚举的sort
方法的功能的方法。如何覆盖枚举枚举排序方法
可以想象我有这个数据
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是散列而不是我想要的版本。
其实,现在有两个更多的方式来进行排序:'arr.min(arr.size)'和'arr.min_by(arr.size){...}'。 :-) –
@CarySwoveland这是一个排序/获取交易,但它也遵循相同风格的a/b版本和一个单独的转换。 – tadman
我已经有了natural_sort_by方法,但我也试图实现排序方法。 –