mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
@@ -351,4 +351,35 @@ class Array
|
||||
end
|
||||
self
|
||||
end
|
||||
|
||||
##
|
||||
# call-seq:
|
||||
# ary.rotate(count=1) -> new_ary
|
||||
#
|
||||
# Returns a new array by rotating +self+ so that the element at +count+ is
|
||||
# the first element of the new array.
|
||||
#
|
||||
# If +count+ is negative then it rotates in the opposite direction, starting
|
||||
# from the end of +self+ where +-1+ is the last element.
|
||||
#
|
||||
# a = [ "a", "b", "c", "d" ]
|
||||
# a.rotate #=> ["b", "c", "d", "a"]
|
||||
# a #=> ["a", "b", "c", "d"]
|
||||
# a.rotate(2) #=> ["c", "d", "a", "b"]
|
||||
# a.rotate(-3) #=> ["b", "c", "d", "a"]
|
||||
|
||||
def rotate(count=1)
|
||||
ary = []
|
||||
len = self.length
|
||||
|
||||
if len > 0
|
||||
idx = (count < 0) ? (len - (~count % len) - 1) : (count % len) # rotate count
|
||||
len.times do
|
||||
ary << self[idx]
|
||||
idx += 1
|
||||
idx = 0 if idx > len-1
|
||||
end
|
||||
end
|
||||
ary
|
||||
end
|
||||
end
|
||||
|
||||
@@ -146,3 +146,13 @@ assert("Array#reverse_each") do
|
||||
true
|
||||
end
|
||||
end
|
||||
|
||||
assert("Array#rotate") do
|
||||
a = ["a", "b", "c", "d"]
|
||||
assert_equal ["b", "c", "d", "a"], a.rotate
|
||||
assert_equal ["a", "b", "c", "d"], a
|
||||
assert_equal ["c", "d", "a", "b"], a.rotate(2)
|
||||
assert_equal ["b", "c", "d", "a"], a.rotate(-3)
|
||||
assert_equal ["c", "d", "a", "b"], a.rotate(10)
|
||||
assert_equal [], [].rotate
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user