现在我有一个数组
letter = ['a','b','c','a','b','c','a','b','b']
有人可以解释一下以下返回值吗?
letter.sort! { |x| letter.count(x) }
#=> ["b", "b", "a", "c", "c", "a", "b", "b", "a"]
当你定义一个sort
or sort!
阻止你有义务接受两个参数,通常a
and b
。这些是排序操作当时正在比较的两个元素,因此将使用不同的对重复调用此块。
返回的内容受到限制,根据定义,您应该返回 -1、0 或 +1only。其他值也可能有效,但不属于规范的一部分。你归来-1
if a
应该在之后b
在该系列中,0
如果它们是等价的,并且1
if b
应该在之后a
.
另外对于任何给定的一组a
, b
and c
值,您应该返回一致的结果,这样如果a < b
and b < c
then a < c
。如果您返回随机值,您的数组将变得一团糟,并且不一定完全排序。排序算法的优化取决于一致的结果。如果你说a
紧接着c
那么之后的所有值a
必须在之后c
以及。
Ruby 很可能会将所有正值折叠为第二项出现在第一项之前的指示。由于您在所有情况下都返回正值,因此您告诉排序算法所有值都在所有其他值之前,这完全是无稽之谈,因为这种情况永远不会发生。
所以,简而言之,你得到的是垃圾,因为你付出了sort
函数垃圾和垃圾进垃圾出原则适用。
解决这个问题的方法是使用sort_by
方法只接受一个参数并为您处理这些比较:
letters.sort_by! { |x| letter.count(x) }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)