所以基本上是为了好玩,我试图生成一列数字(7位数字分别是0和1)
我的代码很短:

a = rand(0000000-1111111)
b = 220
a1 = rand(0000000-1111111)
a2 = rand(0000000-1111111)
a3 = rand(0000000-1111111)
a4 = rand(0000000-1111111)
a5 = rand(0000000-1111111)

while b !=0
  puts a
  puts a2
  puts a3
  puts a4
  puts a5
end

我的问题是,不是生成0和1的随机列,而是使用所有数字。

最佳答案

这是惯用的Ruby:

5.times do
  puts (1..7).map { [0, 1].sample }.join
end

让我们打开它的包装:
5.times do...end非常不言自明。进行doend之间的五次操作。
(1..7)生成一个包含七个元素的数组。我们实际上并不关心现在的内容。 map返回一个新数组,其中每个元素都是调用括号之间的结果。因此,我们将七次调用[0, 1].sample并将结果压缩到一个数组中。当然,sample本身会随机选择01。最后,.join将数组转换为字符串。例如,如果我们说.join('-'),则会在每个元素(1-0-0-1-1-1-0-1)之间放置一个连字符。但是,由于我们未指定任何内容,因此不会在每个元素之间放置任何内容(10011101)。

在那里,您拥有了它。

正如其他人指出的那样,对于此特定问题,可以通过使用二进制文件来完成更快或更短的事情。我认为这不是Ruby Way。关于速度,“过早的优化是万恶之源”,如果您强烈反对慢速代码,则无论如何都不应该对Ruby进行编码。关于可读性,这种方式可能会更短,但是上面的方式更加清晰。 “哦,我们做了五次,这将打印出一个7字长的...随机的0和1s序列...作为一个字符串”。它的读法几乎像英语(如果您知道单词map(定义三))。

10-07 17:57