Ruby字符串排序方法
我试图澄清为什么一行代码通过了rspec测试,而另一行代码没有通过。我的任务是编写一个按长度对字符串数组排序的方法。我尝试将具有不同块的不同排序选项传递到排序方法中。我想我可能已经在我对代码的评论中找到了答案 我的注释掉的代码行是否通过了测试,因为它实际上只是在每次将新项传递到块时检查新项的长度,而不是对照规范中定义的字符串数组中其他项的长度检查项的长度。如果有意义的话 我的代码如下:Ruby字符串排序方法,ruby,sorting,rspec,Ruby,Sorting,Rspec,我试图澄清为什么一行代码通过了rspec测试,而另一行代码没有通过。我的任务是编写一个按长度对字符串数组排序的方法。我尝试将具有不同块的不同排序选项传递到排序方法中。我想我可能已经在我对代码的评论中找到了答案 我的注释掉的代码行是否通过了测试,因为它实际上只是在每次将新项传递到块时检查新项的长度,而不是对照规范中定义的字符串数组中其他项的长度检查项的长度。如果有意义的话 我的代码如下: def sort_by_length(sort_this_array) #sort_this_array
def sort_by_length(sort_this_array)
#sort_this_array.sort {|item| item.length }
sort_this_array.sort {|x,y| x.length <=> y.length }
end
使用
sort
时,始终必须比较两个变量并返回-1、0或1。从:
块必须实现a
和b
之间的比较,并返回-1,
当a
紧跟b
时,当a
和b
相等时为0,如果b
紧跟a
时为+1
在你的注释行中,你没有这样做。如果使用“排序依据”,则可以使用该语法:
array.sort_by { |item| item.length }
还要注意,
sort_by
更快,因为它只对每个项目计算item.length
一次(n次)<代码>排序将在每次比较中计算项的长度
两次(大约2*n*log(n)次)。仅当比较器功能复杂时,才应使用sort
。此外,请注意,您可以更简洁地将此特定案例编写为array.sort\u by(&:length)
。
array.sort_by { |item| item.length }