.insert是如何工作的?

Bod*_*rma 15 ruby

我试图找出insertRuby中的函数功能.

我已经咨询了谷歌和ruby-doc.com,但解释不足以描述这个(看似)神秘的功能.

这让我很困惑:

a = %w{a b c d}
puts a.insert(4, 5)  output = a,b,c,d,5
Run Code Online (Sandbox Code Playgroud)

提出的第一个问题是,为什么没有插入4?

puts a.insert(2,2,6)
Run Code Online (Sandbox Code Playgroud)

输出是:

a
b
2
6
c
d
Run Code Online (Sandbox Code Playgroud)

提出的两个问题是

  1. 为什么2没有插入两次?
  2. 为什么在b和c之间任意放置2和6(看似)?

the*_*Man 46

我不确定是什么混淆.来自Ruby文档:

ary.insert(index, obj...)  -> ary
Run Code Online (Sandbox Code Playgroud)

在具有给定索引的元素之前插入给定值(可能是负数).

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"]
Run Code Online (Sandbox Code Playgroud)

因此,在数组偏移量2之前a.insert(2, 99)插入99数组.请记住,数组的索引从0开始,因此这是数组中的第三个插槽.

第二个例子是将数组插入[1,2,3]到倒数第二个数组插槽中,因为负数偏移从数组的末尾开始计算.-1是最后一个索引,-2是倒数第二个.

Array文档说得好:

数组索引从0开始,如在C或Java中.假定负索引相对于数组的末尾 - 也就是说,索引-1表示数组的最后一个元素,-2是数组中最后一个元素的倒数,依此类推.

这些是在编程中学习的非常重要的概念,而不仅仅是在Ruby中.


Jak*_*les 5

看起来第一个参数是要插入的索引,其余的是要插入的项.

文档似乎证实了这一点,上市功能ary.insert(index, obj...) ? ary

如果你只是想在数组的末尾添加一些值(我不知道Ruby语法,但这应该是正确的)我认为你会想要调用a.insert(a.length, 4, 5)或者a.insert(a.length, 2, 2, 6),例如.

  • 如果您只是想在数组的末尾添加一些值,请使用[`Array#push`](http://www.ruby-doc.org/core/classes/Array.html#M000226)方法. (5认同)