在ruby中将项添加到哈希中,为什么要覆盖项?

在ruby中将项添加到哈希中,为什么要覆盖项?,ruby,Ruby,我有以下代码: chartJsObject = [{label: "Label Stuff", datasets: []}] i = 0 while i < 5 do chartJsObject[i][:datasets] << [rand(10), rand(10)] if chartJsObject[i] i+=1 end while循环中我做错了什么?chart\u js\u对象在索引0处只有一个元素。因此,每次对chart\u js\u object[i]

我有以下代码:

chartJsObject = [{label: "Label Stuff", datasets: []}]

i = 0

while i < 5 do
  chartJsObject[i][:datasets] << [rand(10), rand(10)] if chartJsObject[i]
  i+=1
end

while循环中我做错了什么?

chart\u js\u对象在索引0处只有一个元素。因此,每次对
chart\u js\u object[i]
的调用都返回
nil
,其中
i
不是零。这将导致一个错误,除了操作规定末尾的条件导致代码忽略第一次迭代之后的每个迭代之外

让我们使用变量命名。我会翻译成斯内克的案子。而且,
while
循环在Ruby中非常罕见。要执行特定次数的操作,只需使用
#times
方法即可

因此,我们最终得出以下结论:

>> 5.times { chart_js_object[0][:datasets] << [rand(10), rand(10)] }
>> chart_js_object
=> [{:label=>"Label Stuff", :datasets=>[[0, 4], [6, 0], [5, 4], [4, 6], [8, 6]]}]
>5.times{chart_js_object[0][:dataset]>chart_js_object
=>[{:label=>“label Stuff”,:数据集=>[[0,4],[6,0],[5,4],[4,6],[8,6]}]

由于
chartJsObject
数组只有一个基准,因此数组计数为
1
,数组索引为
chartJsObject[0]
。循环体只运行一次,因为
chartJsObject
数组中只有一个基准,并且您将条件指定为

if chartJsObject[i]
这就是为什么它会给你这样的结果

if chartJsObject[i]