Ruby 就地排序子数组

Ruby sort subarray in place

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

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

如果您想对数组的部分进行排序,您需要重新注入排序的部分。就地修饰符不会在这里帮助你,因为 foo[i..j] returns 一个副本 。您正在就地对副本进行排序,这对原始数组实际上没有任何意义。

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

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"]