Подтвердить что ты не робот

Как изменить положение элемента массива?

У меня вопрос о том, как я могу изменить индекс элемента массива, так что он не попадает в позицию 7., но в позиции 2 вместо этого...

Есть ли функция для обработки этого?

4b9b3361

Ответ 1

Нет ничего проще:

array.insert(2, array.delete_at(7))

Ответ 2

irb> a = [2,5,4,6]
=> [2, 5, 4, 6]
irb> a.insert(1,a.delete_at(3))
=> [2, 6, 5, 4]

Ответ 3

Не лучше использовать:

irb> a = [2,5,4,6]
#=> [2, 5, 4, 6]
irb> a.insert(1, a.pop)
#=> [2, 6, 5, 4]

?

Ответ 4

Объяснение для новичков

Эти ответы велики. Я искал немного больше объяснений о том, как эти ответы работают. Здесь, что происходит в ответах выше, как переключать элементы по значению и ссылки на документацию.

# sample array
arr = ["a", "b", "c", "d", "e", "f", "g", "h"]

# suppose we want to move "h" element in position 7 to position 2 (trekd answer)
arr = arr.insert(2, arr.delete_at(7))
=> ["a", "b", "h", "c", "d", "e", "f", "g"]

Это работает, потому что arr.delete_at(index) удаляет элементы по указанному индексу ('7' в нашем примере выше) и возвращает значение, которое было в этом индексе. Таким образом, запуск arr.delete_at(7) приведет к созданию:

# returns the deleted element
arr.delete_at(7) 
=> "h"           

# array without "h"
arr
=> ["a", "b", "c", "d", "e", "f", "g"]

Объединяя это, метод insert теперь поместит этот элемент "h" в положение 2. Для ясности это разворачивается на два этапа:

# delete the element in position 7
element = arr.delete_at(7)  # "h"
arr.insert(2, element)
=> ["a", "b", "h", "c", "d", "e", "f", "g"]

Переключение элементов по значению

Предположим, вы хотите переместить элемент в массив, значение которого "h" , независимо от его положения, в положение 2. Это можно легко выполнить с помощью метода индекса:

arr = arr.insert(2, arr.delete_at( arr.index("h") ))

Примечание. Вышеприведенное предполагает, что в массиве имеется только одно значение "h" .

Документация

Ответ 5

Если вы не заботитесь о позиции других элементов в массиве, вы можете использовать .rotate! (обратите внимание, что! в конце этого метода изменяет метод фактического массива.

arr = [1, 2, 3, 4, 5, 6, 7, 8]
arr.rotate! -3
arr = [6, 7, 8, 1, 2, 3, 4, 5]

Это берет элемент 8, который находится в индексе 7, и поворачивает его до индекса 2.