打印范围内的数字

时间:2013-01-25 18:58:15

标签: ruby

我正在尝试使用以下代码打印1到50之间的所有数字:

[1..50].each{|n|   puts n}

但控制台打印

 [1..50] 

我想打印这样的东西 1 2 3 4 ... 50

4 个答案:

答案 0 :(得分:13)

请尝试以下代码:

(1..50).each { |n| puts n }

问题是您使用的是[]分隔符,而不是()分隔符。

答案 1 :(得分:7)

这里的错误是您正在创建一个Array范围作为唯一元素的Array对象。

> [1..10].size
=> 1

如果要在范围上调用each之类的方法,则必须将范围包装在括号中,以避免在范围的最后一个元素上调用该方法,而不是在范围本身上调用。

=> (1..10).each { |i| print i }
12345678910

实现同样目的的其他方法:

(1..50).each { |n| print n }
1.up_to(50) { |n| print n }
50.times { |n| print n }

答案 2 :(得分:6)

您可以使用[1..10]进行小调整:

[*1..10].each{ |i| p i }

输出:

1
2
3
4
5
6
7
8
9
10

*(AKA“splat”)将范围“爆炸”到其组件中,然后用于填充数组。它与写(1..10).to_a类似。

你也可以这样做:

puts [*1..10]

打印同样的东西。

所以,试试:

[*1..10].join(' ') # => "1 2 3 4 5 6 7 8 9 10"

或:

[*1..10] * ' ' # => "1 2 3 4 5 6 7 8 9 10"

获得你想要的输出。

答案 3 :(得分:2)

您可以将范围(括号中)转换为数组([1 2 3 4 5 6 ... 48 49 50])并加入每个项目(例如,如果您想要所有项目都加入' '线)。

puts (1..50).to_a.join(' ')
# => 1 2 3 4 5 6 7 ... 48 49 50