Ruby排序子数组就位

时间:2019-03-02 19:46:54

标签: ruby list sorting in-place

如果我在Ruby中有一个数组foo,那么如何就地排序foo[i..j]

我尝试调用foo[i..j].sort!,但是它没有对原始数组进行排序,只是返回了它的排序部分。

1 个答案:

答案 0 :(得分:2)

如果要对数组的部分进行排序,则需要重新注入已排序的部分。就地修饰符在这里无济于事,因为foo[i..j] 返回副本。您正在对副本进行排序,这实际上对原始数组没有任何意义。

因此,将原始切片替换为相同的排序版本:

test = %w[ z b f d c h k z ]

test[2..6] = test[2..6].sort
# => ["c", "d", "f", "h", "k"]

test
# => ["a", "b", "c", "d", "f", "h", "k", "q"]