2016-10-15 31 views
0

這是我的數組和自定義方法,用於在不使用反向方法的情況下反轉數組輸出。不知道它打破了什麼位置,試圖在控制檯中運行它,沒有骰子。ruby​​ **不使用反向方法的反向數組

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

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

p reversal(numbers) 
+1

纔可以考慮 「破」,它必須一直處於工作狀態,第一。你明白'<=>'是做什麼的嗎? – Makoto

+0

我不確定,是不是顛倒了2個物體的順序? –

+1

[** No。**](https://docs.ruby-lang.org/zh/2.3.0/Array.html#method-i-3C-3D-3E)非常多***沒有** *。 – Makoto

回答

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 
+1

謝謝roychri。如果不顛倒對象的順序,我仍然對組合比較運算符如何適應所有這些問題感到困惑。 –

+1

比較運算符用於排序。你想要做的是顛倒數組,使得如果數組包含[4,2,8],它就變成[8,2,4]。在這種情況下你不能排序。只要你拿走最後一個,先做出來,等等。 – roychri

+2

@WestCoastCharlie組合比較運算符_並不適合所有這些,它完全不相關。該運算符只是'<','=='和'>'組合到一個運算符中;所以,不是返回true或false,它返回'-1'(對於'a小於b'),'0'(對於'a等於b')或'+ 1'(對於' a大於b')。 – philomory

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]