ruby **反向数组,不使用反向方法

时间:2016-10-15 02:06:28

标签: ruby

这是我的数组和自定义方法,用于在不使用reverse方法的情况下反转数组输出。不确定它在哪里破了,尝试在控制台中运行它,没有骰子。

numbers = [1, 2, 3, 4, 5, 6]

def reversal(array)
  do |item1, item2| item2 <=> item1
end

p reversal(numbers)

4 个答案:

答案 0 :(得分:2)

有很多方法......这里有两个。

numbers6 = [1, 2, 3, 4, 5, 6]
numbers5 = [1, 2, 3, 4, 5]

<强>#1

def my_rev(numbers)
  numbers.each_index.map { |i| numbers[-1-i] }
end
my_rev(numbers6)
  #=> [6, 5, 4, 3, 2, 1]
my_rev(numbers5)
  #=> [5, 4, 3, 2, 1] 

<强>#2

def my_rev(numbers)
  (numbers.size/2).times.with_object(numbers.dup) { |i,a| a[i],a[-1-i]=a[-1-i],a[i] }
end
my_rev(numbers6)
  #=> [6, 5, 4, 3, 2, 1]
my_rev(numbers5)
  #=> [5, 4, 3, 2, 1] 

答案 1 :(得分:1)

这是处理此问题的一种方法。这不是很有效但有效。

def reversal(array)
    reversed = []
    loop do
        reversed << array.pop
        break if array.empty?
    end
    reversed
end

以下是执行相同操作的另一个实现:

def reversal(array)
    array.each_with_index.map do |value, index|
        array[array.count-index-1]
    end
end

答案 2 :(得分:0)

执行此操作的方法很多

1种常规方式

a=[1,2,3,4,5,6,7,8]
i=1
while i <= a.length/2 do
  temp = a[i-1]
  a[i-1] =  a[a.length-i]
  a[a.length-i] = temp
  i+=1
end

2使用pop

a=[1,2,3,4,5,6]
i=0
b=[]
t=a.length
while i< t do
  b << a.pop
  i+=1
end

3使用弹出循环

a=[1,2,3,4,5,6]
b=[]
loop do
  b << a.pop
  break if a.empty?
end

答案 3 :(得分:0)

a = [1,2,3,4,5]
b = []
a.length.times { |i| b << a[(i+1)*-1] }
b
=> [5,4,3,2,1]