我通过对quicksort
类进行猴子修补来阅读此代码约为Array
。
class Array
def quicksort
return [] if empty?
pivot = delete_at(rand(size))
left, right = partition(&pivot.method(:>))
return *left.quicksort, pivot, *right.quicksort
end
end
我不知道在*
开头看到的星(*left.quicksort
)符号是什么。我们只能使用left.quicksort
?
答案 0 :(得分:2)
星形(在本例中)代表阵列拆包。它背后的想法是你想要一个带有给定元素的数组,而不是数组 数组,元素,数组:
left = [1, 2, 3]
pivot = 4
right = [5, 6, 7]
[left, pivot, right] # => [[1, 2, 3], 4, [5, 6, 7]]
[*left, pivot, *right] # => [1, 2, 3, 4, 5, 6, 7]
答案 1 :(得分:0)
*获取参数列表并将它们拆分为单个元素。 这允许您返回一个非嵌套数组,即使左侧和右侧本身返回一个数组。
关于我们只能使用left.quicksort
你试过吗?
def a()
return *[1,2,3], 4, *[5,6]
end
def b()
return [1,2,3], 4, *[5,6]
end
b()
=> [[1, 2, 3], 4, 5, 6]
a()
=> [1, 2, 3, 4, 5, 6]
答案 2 :(得分:0)
如果没有星号,您将返回三个值...第一个和最后一个值将是具有多个值的单个数组
[array1], pivot, [array2]
使用星号,数组值将作为单独的组件返回...
array1_value_1, array1_value_2, array1_value_3, ..., pivot, array2_value_1, array2_value2, array2_value_3, ...