Как перебрать массив, начиная с последнего элемента? (Рубин) - PullRequest
39 голосов
/ 27 февраля 2010

Я пришел с приведенным ниже решением, но я считаю, что должно быть лучше ...

array = [ 'first','middle','last']

index = array.length
array.length.times { index -= 1; puts array[index]}

Ответы [ 6 ]

92 голосов
/ 27 февраля 2010

Руби умный

a = [ "a", "b", "c" ]
a.reverse_each {|x| print x, " " }
53 голосов
/ 27 февраля 2010
array.reverse.each { |x| puts x }
4 голосов
/ 10 ноября 2013

Вы даже можете использовать цикл for

array = [ 'first','middle','last']
for each in array.reverse do
   print array
end

напечатает

last
middle
first
3 голосов
/ 20 сентября 2016

Если вы хотите перебрать диапазон в обратном порядке, используйте:

(0..5).reverse_each do |i|
  # do something
end
0 голосов
/ 12 сентября 2017

Если вы хотите добиться того же, не используя реверс [иногда этот вопрос возникает в интервью]. Нам нужно использовать базовую логику.

  1. массив может быть доступен через индекс
  2. установить индекс на длину массива и затем уменьшать на 1, пока индекс не достигнет 0
  3. вывод на экран или новый массив или использование цикла для выполнения любой логики.

        def reverseArray(input)
          output = []
          index = input.length - 1 #since 0 based index and iterating from 
          last to first
    
          loop do
            output << input[index]
            index -= 1
            break if index < 0
          end
    
          output
        end
    
        array = ["first","middle","last"]
    
        reverseArray array #outputs: ["last","middle","first"]
    
0 голосов
/ 14 октября 2015

В шаблоне Jade вы можете использовать:

for item in array.reverse()
   item
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...