Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Ruby:For循环内部迭代导致数组中填充“For”;“范围”;项目类别_Arrays_Ruby_Loops_For Loop_Iteration - Fatal编程技术网

Arrays Ruby:For循环内部迭代导致数组中填充“For”;“范围”;项目类别

Arrays Ruby:For循环内部迭代导致数组中填充“For”;“范围”;项目类别,arrays,ruby,loops,for-loop,iteration,Arrays,Ruby,Loops,For Loop,Iteration,有一个二维数组,默认情况下由“0”填充。我想创建另一个数组,它为每列保存“非0”项的数量,因此,第二个数组的长度与二维数组的列数相同 这是我遇到问题的代码,我用固定长度(2D数组的列数)初始化了1D数组 在2D数组中迭代,对于每列的每个非0元素,我希望增加1D数组中的相应值: column_depth.map! do |a| for i in 0..6 play_field[i].each do |b| if b != "0" a = a+1

有一个二维数组,默认情况下由“0”填充。我想创建另一个数组,它为每列保存“非0”项的数量,因此,第二个数组的长度与二维数组的列数相同

这是我遇到问题的代码,我用固定长度(2D数组的列数)初始化了1D数组

在2D数组中迭代,对于每列的每个非0元素,我希望增加1D数组中的相应值:

column_depth.map! do |a|
for i in 0..6
    play_field[i].each do |b|
        if b != "0"
            a = a+1
        end
    end
end
end #outer map (column_depth)
但是,当我打印出column_depth数组的内容时,会得到以下结果:

0..6
0..6
0..6
0..6
0..6
0..6
0..6
0..6

我对这个输出完全感到困惑,为什么它会将for循环的范围指定给值“a”?(测试输入为所有播放字段的零矩阵)

map通过用提供的块计算结果替换每个值来更新数组。重新指定块参数无效

正如您所写的,块将计算为
for
表达式计算为的任何值,这始终是迭代的对象(在本例中是范围)

您所需要做的就是更改它,以便块中的最后一行计算为您想要的结果

顺便说一句,您可以用以下内容替换块内容

a + play_field[0..6].count {|b| b != "0} 

作为迭代集合的一种方式,很少需要迭代一系列整数。

您不必创建一个数组,然后修改它。只是

column_depth = play_field.map{|col| col.count{|n| n != 0}}
用于计算
播放字段
其他维度中的非零数字

row_depth = play_field.transpose.map{|row| row.count{|n| n != 0}}

啊,我删除了我的评论,说了一些类似的话,因为当我重新阅读时,我认为我犯了一个错误,但我很高兴看到我的解释几乎是正确的+1.John的评论让我开始在同一个地方思考,看到您更详细的回答非常有帮助,谢谢。谢谢您的投入,这几乎就是我想要实现的(对行而不是列进行)。使用map函数动态创建结果数组肯定是一种更好的方法。事实上,这是对我尝试用更长的方法所做的非常复杂的响应。我将研究这个用法,以便更好地理解逻辑。
row_depth = play_field.transpose.map{|row| row.count{|n| n != 0}}