你如何在 ruby 中倒序
How do you reverse order in ruby
如何在 Ruby 中编写代码片段,以相反的顺序打印出 1 到 200 之间的每个 3 的倍数?
这是我目前的代码:
(1..200).each do | i | ##loop it then
if i % 3 == 0
您可以尝试将值赋给变量a然后您可以:
a.reverse!
puts a
这也可能有助于举个例子:
def reverse_string(string) # method reverse_string with parameter 'string'
loop = string.length # int loop is equal to the string's length
word = '' # this is what we will use to output the reversed word
while loop > 0 # while loop is greater than 0, subtract loop by 1 and add the string's index of loop to 'word'
loop -= 1 # subtract 1 from loop
word += string[loop] # add the index with the int loop to word
end # end while loop
return word # return the reversed word
end # end the method
Range
没有 #reverse
方法,但您可以调用 #to_a
到 return 这些数字的数组,然后调用 #reverse_each
在该数组上以相反的顺序迭代数字:
(1..200).to_a.reverse_each { |i| puts i if i % 3 == 0 }
您可能需要 #select
和 #reverse
。
puts (1..200).select { |i| i % 3 == 0 }.reverse
这个有效:
(1..200).to_a.reverse.each do |number|
if number % 3 == 0
puts number
end
end
这里您要指定从 1 到 200 的数字范围,将它们转换为数组,反转顺序并遍历每个元素以查看它是否可以被 3 整除(即,如果您将它除以 3,它不应该有余数),如果有,打印数字 :)
编辑:正如乔丹指出的那样,写作
reverse_each
而不是
reverse.each
效率更高。
打印从 200 到 1 的三的倍数的最简单方法是使用 Integer#downto
:
200.downto(1) do |i|
puts i if i % 3 == 0
end
与其他答案不同,它不需要将范围转换为数组或创建数组并反转它。
OP 希望打印范围内的某些元素。首先构造一个数组是低效的(当然不一定是坏事)。我的回答和其他一些回答没有创建数组。
假设范围的形式是 first..last
。要以相反的顺序打印每个 multiple
个元素,您可以这样写:
def rev_n_skip(first, last, multiple)
(first..last).step(multiple).reverse_each { |i| print "#{i} " }
puts
end
rev_n_skip(1, 19, 3) #-> 19 16 13 10 7 4 1
rev_n_skip(1, 18, 3) #-> 16 13 10 7 4 1
rev_n_skip(1, 17, 3) #-> 16 13 10 7 4 1
rev_n_skip(1, 16, 3) #-> 16 13 10 7 4 1
rev_n_skip(1, 15, 3) #-> 13 10 7 4 1
rev_n_skip(2, 19, 3) #-> 17 14 11 8 5 2
rev_n_skip(2, 18, 3) #-> 17 14 11 8 5 2
rev_n_skip(2, 17, 3) #-> 17 14 11 8 5 2
rev_n_skip(2, 16, 3) #-> 14 11 8 5 2
rev_n_skip(2, 15, 3) #-> 14 11 8 5 2
另外三种不需要数组的方法是:
(1..200).reverse_each { |i| puts i if i % 3 == 0 }
或者:
(200..1).step(-1).each { |i| puts i if i % 3 == 0 }
并且:
200.step(1, -1).each { |i| puts i if i % 3 == 0 }
如何在 Ruby 中编写代码片段,以相反的顺序打印出 1 到 200 之间的每个 3 的倍数?
这是我目前的代码:
(1..200).each do | i | ##loop it then
if i % 3 == 0
您可以尝试将值赋给变量a然后您可以:
a.reverse!
puts a
这也可能有助于举个例子:
def reverse_string(string) # method reverse_string with parameter 'string'
loop = string.length # int loop is equal to the string's length
word = '' # this is what we will use to output the reversed word
while loop > 0 # while loop is greater than 0, subtract loop by 1 and add the string's index of loop to 'word'
loop -= 1 # subtract 1 from loop
word += string[loop] # add the index with the int loop to word
end # end while loop
return word # return the reversed word
end # end the method
Range
没有 #reverse
方法,但您可以调用 #to_a
到 return 这些数字的数组,然后调用 #reverse_each
在该数组上以相反的顺序迭代数字:
(1..200).to_a.reverse_each { |i| puts i if i % 3 == 0 }
您可能需要 #select
和 #reverse
。
puts (1..200).select { |i| i % 3 == 0 }.reverse
这个有效:
(1..200).to_a.reverse.each do |number|
if number % 3 == 0
puts number
end
end
这里您要指定从 1 到 200 的数字范围,将它们转换为数组,反转顺序并遍历每个元素以查看它是否可以被 3 整除(即,如果您将它除以 3,它不应该有余数),如果有,打印数字 :)
编辑:正如乔丹指出的那样,写作
reverse_each
而不是
reverse.each
效率更高。
打印从 200 到 1 的三的倍数的最简单方法是使用 Integer#downto
:
200.downto(1) do |i|
puts i if i % 3 == 0
end
与其他答案不同,它不需要将范围转换为数组或创建数组并反转它。
OP 希望打印范围内的某些元素。首先构造一个数组是低效的(当然不一定是坏事)。我的回答和其他一些回答没有创建数组。
假设范围的形式是 first..last
。要以相反的顺序打印每个 multiple
个元素,您可以这样写:
def rev_n_skip(first, last, multiple)
(first..last).step(multiple).reverse_each { |i| print "#{i} " }
puts
end
rev_n_skip(1, 19, 3) #-> 19 16 13 10 7 4 1
rev_n_skip(1, 18, 3) #-> 16 13 10 7 4 1
rev_n_skip(1, 17, 3) #-> 16 13 10 7 4 1
rev_n_skip(1, 16, 3) #-> 16 13 10 7 4 1
rev_n_skip(1, 15, 3) #-> 13 10 7 4 1
rev_n_skip(2, 19, 3) #-> 17 14 11 8 5 2
rev_n_skip(2, 18, 3) #-> 17 14 11 8 5 2
rev_n_skip(2, 17, 3) #-> 17 14 11 8 5 2
rev_n_skip(2, 16, 3) #-> 14 11 8 5 2
rev_n_skip(2, 15, 3) #-> 14 11 8 5 2
另外三种不需要数组的方法是:
(1..200).reverse_each { |i| puts i if i % 3 == 0 }
或者:
(200..1).step(-1).each { |i| puts i if i % 3 == 0 }
并且:
200.step(1, -1).each { |i| puts i if i % 3 == 0 }