所以基本上是为了好玩,我试图生成一列数字(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
非常不言自明。进行do
和end
之间的五次操作。(1..7)
生成一个包含七个元素的数组。我们实际上并不关心现在的内容。 map
返回一个新数组,其中每个元素都是调用括号之间的结果。因此,我们将七次调用[0, 1].sample
并将结果压缩到一个数组中。当然,sample
本身会随机选择0
或1
。最后,.join
将数组转换为字符串。例如,如果我们说.join('-')
,则会在每个元素(1-0-0-1-1-1-0-1)之间放置一个连字符。但是,由于我们未指定任何内容,因此不会在每个元素之间放置任何内容(10011101)。在那里,您拥有了它。
正如其他人指出的那样,对于此特定问题,可以通过使用二进制文件来完成更快或更短的事情。我认为这不是Ruby Way。关于速度,“过早的优化是万恶之源”,如果您强烈反对慢速代码,则无论如何都不应该对Ruby进行编码。关于可读性,这种方式可能会更短,但是上面的方式更加清晰。 “哦,我们做了五次,这将打印出一个7字长的...随机的0和1s序列...作为一个字符串”。它的读法几乎像英语(如果您知道单词map(定义三))。