我正在尝试使用分区enumerable method将数组分成两个不同的数组。左数组工作正常。
def quicksort(array)
pivot = array.delete_at(6)
left, right = array.partition { |x| x < pivot }
puts "right's size"
puts right.size
puts 'right'
puts right
end
r = [14, 6, 41, 0, 5, 7294, 4, 25, 12, 24, 5, 2, 62, 67, 32, 78, 63, 3]
p quicksort(r)
这是irb的结果
right's size
14
right
14
6
41
5
7294
25
12
24
5
62
67
32
78
63
nil
导致nil
出现的原因是什么?
答案 0 :(得分:4)
p quicksort(r)
输出quicksort(r)
的返回值,这是quicksort
定义中最后一行的评估值:puts right
。方法puts
始终返回nil
。
答案 1 :(得分:0)
nil
不是array
的元素,而是方法的返回值。
由于您未从quicksort
返回任何内容,因此会返回nil
。
在最后编写要返回的对象将返回该对象,而不是nil
,例如
def quicksort(array)
pivot = array.delete_at(6)
left, right = array.partition { |x| x < pivot }
puts "right's size"
puts right.size
puts 'right'
puts right
array
end
此外,在调用方法时删除p
也会有所帮助。
只需quicksort(array)
代替p quicksort(array)