Commit a48e0018 authored by Jun Hiroe's avatar Jun Hiroe Committed by Yukihiro "Matz" Matsumoto

Add Array#insert

parent 951f027b
...@@ -490,4 +490,31 @@ class Array ...@@ -490,4 +490,31 @@ class Array
self self
end end
end end
##
# call-seq:
# ary.insert(index, obj...) -> ary
#
# Inserts the given values before the element with the given +index+.
#
# Negative indices count backwards from the end of the array, where +-1+ is
# the last element.
#
# 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"]
def insert(idx, *obj)
idx += self.size + 1 if idx < 0
ary = []
before_ary = self[0, idx]
after_ary = self[idx, self.size]
before_ary.each {|val| ary << val} unless before_ary == nil
while ary.size < idx
ary << nil
end
obj.each {|val| ary << val} unless obj == nil
after_ary.each {|val| ary << val} unless after_ary == nil
self.replace(ary)
end
end end
...@@ -197,3 +197,12 @@ assert("Array#reject!") do ...@@ -197,3 +197,12 @@ assert("Array#reject!") do
assert_equal [1, 2, 3], a.reject! { |val| val > 3 } assert_equal [1, 2, 3], a.reject! { |val| val > 3 }
assert_equal [1, 2, 3], a assert_equal [1, 2, 3], a
end end
assert("Array#insert") do
a = ["a", "b", "c", "d"]
assert_equal ["a", "b", 99, "c", "d"], a.insert(2, 99)
assert_equal ["a", "b", 99, "c", 1, 2, 3, "d"], a.insert(-2, 1, 2, 3)
b = ["a", "b", "c", "d"]
assert_equal ["a", "b", "c", "d", nil, nil, 99], b.insert(6, 99)
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment