我尝试创建一个随机填充"A"
或"D"
的10 X 10数组。我找到了以下代码。
Array.new(10){Array.new(10) { rand >0.5 ? "A" : "D"}}
我无法理解代码。有人可以解释一下这段代码吗?
答案 0 :(得分:4)
{}中的部分称为代码块
所以你要应用这种模式两次
Array.new(10){codeblock}
它说 - 创建一个包含十个项目的数组,其中每个项目都是代码块的结果
内部代码块:
{rand >0.5 ? "A" : "D"}
称为ternary operator。它每次都会选择一个新的随机数,并将其与0.5
进行比较。如果数字大于0.5
,那么“A”将是代码块的结果。否则它将是“D”
由于rand
返回0到1之间数字的均匀分布,因此项目为“A”的可能性为50%,“D”为50%的可能性
答案 1 :(得分:0)
John's answer已经解释了您分享的特定代码段。
有很多方法可以完成你想要做的事情。以下是更多方法:
Array.new(10).fill (["A","D"] * 5).to_a.shuffle!
Array.new(10).fill ["A","D"].cycle(5).to_a.sample(10)