如果我在Ruby中有一个数组foo,那么如何就地排序foo[i..j]
?
我尝试调用foo[i..j].sort!
,但是它没有对原始数组进行排序,只是返回了它的排序部分。
答案 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"]