Как мне переместить элемент массива на одно место вверх / вниз с помощью Ruby - PullRequest
0 голосов
/ 07 мая 2018

Допустим, у меня есть этот массив

array = ['a', 'b', 'c', 'd']

Каков хороший способ нацелиться на элемент (например, «b») и переключить его следующим элементом в строке (в данном случае «c»), чтобы получить результат:

=> ['a', 'c', 'b', 'd']

Ответы [ 4 ]

0 голосов
/ 07 мая 2018

Предполагая, что вы хотите нацеливать элементы по их индексам, комбинация insert и delete_at будет работать:

array = %w[a b c d]
array.insert(2, array.delete_at(1))
array
#=> ["a", "c", "b", "d"]
0 голосов
/ 07 мая 2018
array[1], array[2] = array[2], array[1]
array #=> ["a", "c", "b", "d"]

или

array[1, 2] = array.values_at(2, 1)
array #=> ["a", "c", "b", "d"]
0 голосов
/ 07 мая 2018

Нет встроенной функции для этого. Вы можете поменять значения следующим образом:

array = %w[a b c d]
array[1..2] = array[1..2].reverse
array #=> ["a", "c", "b", "d"]

Вы можете добавить несколько вспомогательных методов в класс массива ядра.

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

Примечание: Имейте в виду, что это решение изменяет исходный массив. Вы также можете выбрать версию, которая создает новый массив. Для этой версии вы можете позвонить # dup (result = dup), чем работать с result вместо self.

Ссылка:

0 голосов
/ 07 мая 2018

Попробуйте это для обмена

array[0],array[1] = array[1],array[0]

или вообще

array[i],array[i+1] = array[i+1],array[i]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...