0 ruby arrays sorting counting
现在我有一个阵列
letter = ['a','b','c','a','b','c','a','b','b']
Run Code Online (Sandbox Code Playgroud)
有人可以解释以下返回值吗?
letter.sort! { |x| letter.count(x) }
#=> ["b", "b", "a", "c", "c", "a", "b", "b", "a"]
Run Code Online (Sandbox Code Playgroud)
当您定义一个sort或sort!块时,您有义务接受两个参数,通常a和b.这些是排序操作当时比较的两个元素,因此将使用各种对重复调用此块.
有强加给你回什么限制,根据定义,你应该-1,0或+1返回只.其他值可能有效,但不是规范的一部分.您将返回-1如果a要来后,b在系列中,0如果他们是等价的,1如果b要来之后a.
此外,对于任何给定的a,b和c值,你应该返回一致的结果,例如,如果a < b和b < c再a < c.如果你返回随机值,你的数组将是一个完整的混乱,并不一定完全排序.排序算法中的优化取决于一致的结果.如果你说a之后,c所有后来的价值也a必须在之后c.
Ruby极有可能将所有正面值折叠成第二个词在第一个词之前出现的迹象.由于您为所有情况返回一个正值,您告诉排序算法所有值都在所有其他值之前,这是完全无意义的,因为这种情况永远不会发生.
所以,简而言之,你得到了垃圾,因为你给了sort垃圾功能垃圾和垃圾输出原则.
解决这个问题的sort_by方法是使用只接受一个参数的方法并为您处理这些比较:
letters.sort_by! { |x| letter.count(x) }
Run Code Online (Sandbox Code Playgroud)