我在理解如何array.sort{ |x,y| block }精确工作方面存在问题,因此如何使用它?
Ruby文档中的一个示例:
a = [ "d", "a", "e", "c", "b" ] a.sort #=> ["a", "b", "c", "d", "e"] a.sort { |x,y| y <=> x } #=> ["e", "d", "c", "b", "a"] 问题来源于stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在你的例子中
a.sort 相当于
a.sort { |x, y| x <=> y } 如你所知,对数组排序,你需要能够比较它的元素(如果你怀疑,只是试图实现任何排序算法,而无需使用任何比较,没有<,>,<=或>=)。
您提供的块实际上是一个函数,sort算法将调用该函数以比较两个项目。那就是x并且y将永远是sort算法在执行过程中选择的输入数组的某些元素。
该sort算法将假定此比较功能/块将满足方法的要求<=>:
如果x <y返回-1 如果x = y返回0 如果x> y返回1 无法提供足够的比较功能/块将导致数组的顺序不确定。
您现在应该了解为什么
a.sort { |x, y| x <=> y } 和
a.sort { |x, y| y <=> x } 以相反的顺序返回相同的数组。
要详细说明泰特·约翰逊(Tate Johnson)添加的内容,如果<=>对任何课程实施比较功能,都将获得以下内容
您可以包括模块Comparable中的类,它会自动为您定义了以下方法:between?,==,>=,<,<=和>。 现在可以使用对的默认调用(即不带参数)对类的实例进行排序sort。 请注意,<=>已经提供的方法无论它在Ruby的标准库是有道理的(Bignum,Array,File::Stat,Fixnum,String,Time,等...)。