У меня вопрос о том, как я могу изменить индекс элемента массива, так что он не попадает в позицию 7., но в позиции 2 вместо этого...
Есть ли функция для обработки этого?
У меня вопрос о том, как я могу изменить индекс элемента массива, так что он не попадает в позицию 7., но в позиции 2 вместо этого...
Есть ли функция для обработки этого?
Нет ничего проще:
array.insert(2, array.delete_at(7))
irb> a = [2,5,4,6]
=> [2, 5, 4, 6]
irb> a.insert(1,a.delete_at(3))
=> [2, 6, 5, 4]
Не лучше использовать:
irb> a = [2,5,4,6]
#=> [2, 5, 4, 6]
irb> a.insert(1, a.pop)
#=> [2, 6, 5, 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" .
Если вы не заботитесь о позиции других элементов в массиве, вы можете использовать .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.