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

Как работает ininsert?

Я пытаюсь выяснить, что делает функция insert в Ruby.

Я консультировался с Google и ruby-doc.com, но объяснений недостаточно для описания этой (по-видимому) таинственной функции.

Вот что меня смущает:

a = %w{a b c d}
puts a.insert(4, 5)  output = a,b,c,d,5

Первый поднятый вопрос: почему 4 не вставлены?

puts a.insert(2,2,6)

Вывод:

a
b
2
6
c
d

Два поднятых вопроса:

  • Почему 2 не вставлен дважды?
  • Почему 2 и шесть (по-видимому) произвольно помещаются между b и c?
4b9b3361

Ответ 1

Я не уверен, что такое путаница. Из документов Ruby:

ary.insert(index, obj...)  -> ary

Вставляет заданные значения перед элементом с указанным индексом (который может быть отрицательный).

a = %w{ a b c d }
a.insert(2, 99)         #=> ["a", "b", 99, "c", "d"]
a.insert(-2, 1, 2, 3)   #=> ["a", "b", 99, "c", 1, 2, 3, "d"]

Итак, a.insert(2, 99) вставляет 99 в массив непосредственно перед смещением массива 2. Помните, что индекс массива начинается с 0, так что это третий слот в массиве.

Второй пример - это вставка массива [1,2,3] во второй сегмент из последнего массива, поскольку отрицательные смещения рассчитываются с конца массива. -1 - последний индекс, -2 - второй.

Документы Array говорят об этом хорошо:

Индексирование массива начинается с 0, как на C или Java. Предполагается, что отрицательный индекс относится к конец массива --- то есть индекс -1 указывает на последний элемент массив, -2 - это следующий за последним элементом в массиве и т.д.

Это ОЧЕНЬ важные понятия для обучения в программировании вообще, а не только в Ruby.

Ответ 2

Похоже, что первым параметром является индекс для вставки в, а остальные - элементы для вставки.

docs, как подтверждают это, перечисляя функцию как ary.insert(index, obj...) → ary

Если вы просто хотите добавить некоторые значения в конец массива (я не знаю синтаксиса Ruby, но это должно быть правильно), я думаю, вы захотите назвать a.insert(a.length, 4, 5) или a.insert(a.length, 2, 2, 6), например.