Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby字符串排序方法_Ruby_Sorting_Rspec - Fatal编程技术网

Ruby字符串排序方法

Ruby字符串排序方法,ruby,sorting,rspec,Ruby,Sorting,Rspec,我试图澄清为什么一行代码通过了rspec测试,而另一行代码没有通过。我的任务是编写一个按长度对字符串数组排序的方法。我尝试将具有不同块的不同排序选项传递到排序方法中。我想我可能已经在我对代码的评论中找到了答案 我的注释掉的代码行是否通过了测试,因为它实际上只是在每次将新项传递到块时检查新项的长度,而不是对照规范中定义的字符串数组中其他项的长度检查项的长度。如果有意义的话 我的代码如下: def sort_by_length(sort_this_array) #sort_this_array

我试图澄清为什么一行代码通过了rspec测试,而另一行代码没有通过。我的任务是编写一个按长度对字符串数组排序的方法。我尝试将具有不同块的不同排序选项传递到排序方法中。我想我可能已经在我对代码的评论中找到了答案

我的注释掉的代码行是否通过了测试,因为它实际上只是在每次将新项传递到块时检查新项的长度,而不是对照规范中定义的字符串数组中其他项的长度检查项的长度。如果有意义的话

我的代码如下:

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 }