.insert是如何工作的?

时间:2011-06-24 02:47:27

标签: ruby

我试图弄清楚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

提出的两个问题是

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

2 个答案:

答案 0 :(得分:45)

我不确定这是多么混乱。来自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)正在数组偏移量2之前将99插入数组中。请记住,数组的索引从0开始,因此这是第三个​​插槽阵列。

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

Array文档说得好:

  

数组索引   从C开始,就像在C或Java中一样。假设负指数是相对的   数组的结尾---也就是说索引为-1表示最后一个元素   数组,-2是数组中最后一个元素的倒数,依此类推。

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

答案 1 :(得分:5)

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

docs似乎可以确认这一点,将该功能列为ary.insert(index, obj...) → ary

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