如何使用Ruby向上/向下移动数组元素

roy*_*aar 0 ruby

假设我有这个数组

array = ['a', 'b', 'c', 'd']
Run Code Online (Sandbox Code Playgroud)

什么是定位元素的好方法(例如'b')并使用行中的下一个元素(在本例中为'c')切换它,结果变为:

=> ['a', 'c', 'b', 'd']
Run Code Online (Sandbox Code Playgroud)

saw*_*awa 9

array[1], array[2] = array[2], array[1]
array #=> ["a", "c", "b", "d"]
Run Code Online (Sandbox Code Playgroud)

要么

array[1, 2] = array.values_at(2, 1)
array #=> ["a", "c", "b", "d"]
Run Code Online (Sandbox Code Playgroud)


3li*_*t0r 7

这样做没有功能.您可以像这样交换值:

array = %w[a b c d]
array[1..2] = array[1..2].reverse
array #=> ["a", "c", "b", "d"]
Run Code Online (Sandbox Code Playgroud)

您可以向核心数组类添加一些辅助方法.

class Array
  def move_up(index)
    self[index, 2] = self[index, 2].reverse
    self
  end

  def move_down(index)
    move_up(index - 1)
  end
end
Run Code Online (Sandbox Code Playgroud)

注意:请记住,此解决方案会改变原始数组.您还可以选择创建新阵列的版本.对于这个版本,您可以调用#dup(result = dup)result而不是使用self.

参考文献: