如何在Ruby中一行代码中计数从1到9。

21 浏览
0 Comments

如何在Ruby中一行代码中计数从1到9。

我正在努力想出如何在Ruby中在一行内循环数字。

x = 0
while x <= 9
  puts x
  x += 1
end

这将给出:

0
1
2
3
4
5
6
7
8
9

每个数字都在不同的行上。

但是我想要的是在一行上获得这些数字,就像:

01234567891011121314151617181920

也不仅限于0到9,更像是从0到无穷大在一行上。

目的是创建一个遵循这个模式的任意大小的三角形:

1
12
123
1234
12345
123456

每个数字都在不同的行上。这里的格式不允许我在不同的行上放置它们。

真的很想解决这个问题。它让我头疼。

0
0 Comments

问题出现的原因是需要在Ruby中以单行的方式计数1到9,即每行输出一个数字。

解决方法是通过将数字1到9转换为字符串并连接起来,然后使用循环逐行打印字符串的子串。

以下是解决方法的代码:

last_num = 9
str = (1..last_num).to_a.join # 创建字符串123456789
0.upto(last_num-1){ |i| puts str[0..i] } # 逐行打印

该代码首先将数字1到9转换为数组,然后使用`join`方法将数组元素连接成字符串。接下来,使用循环从0到8的索引值,通过`puts`方法打印字符串的子串,即从第一个字符到当前索引值的字符。这样就实现了在单行中逐个打印数字1到9的效果。

0
0 Comments

问题的出现原因是用户想要创建一个遵循特定模式的任意大小的三角形,但是用户对如何实现这一目标没有明确要求。以下是两种实现方法。

#1

def print_triangle(n)
  (1..n).each.with_object('') { |i,s| puts s << i.to_s }
end
print_triangle(9)
1
12
123
1234
12345
123456
1234567
12345678
123456789

#2

def print_triangle(n)
  s = (1..n).to_a.join
  (1..n).each { |i| puts s[0,i] }
end
print_triangle(9)
1
12
123
1234
12345
123456
1234567
12345678
123456789

这里的临时字符串是用来做什么的?:)

我打印了s的第一个字符,然后是s的前两个字符,以此类推,而不是为每行创建一个字符串(通过创建一个数组然后连接)。这样回答了你的问题吗?请注意,我修改了我的回答。

我没有更好的事情可做,所以我决定在这里对不同的方法进行性能测试。你可能会觉得有趣:pastie.org/10940329

如果你的意思是打印12等等,那似乎不如使用字符串高效。让我们看一个答案!

在我的基准测试中,使用打印操作比使用临时字符串的方法略微更高效。但是each_with_object的效率更高。

0
0 Comments

问题的原因是,有人想要在Ruby中将1到9的数字在一行中计数。然后,有人给出了解决方法,即使用each方法来遍历1到9这个范围,并使用print方法来打印每个数字,最后使用puts方法来换行。

解决方法如下:

(1..9).each { |n| print n }
puts

这段代码会遍历从1到9的范围,并对每个数字执行一系列操作。首先,使用print方法打印每个数字,然后使用puts方法换行。

通过使用这个解决方法,问题得以解决。原帖中的人非常感激地说:“你真是个救星!非常感谢你!”

0