[英]ruby array iteration, counting only occupied indices
我正在尝试计算已占用空间的数量,然后从#turn_count
返回该计数。 现在,我要返回orig数组。
我还在计算每次迭代,而不是占用的索引。
board = [" ", " x", " ", " ", "O", "O", " ", " ", "X"]
def turn_count(board)
counter = 0
board.each do |index|
if index = "x" || index = "o"
counter += 1
puts "#{counter}"
end
end
end
turn_count(board)
您只需要在函数末尾返回counter
的值,并将=
更改为==
。
=
用于分配。 ==
用于比较。
def turn_count(board)
counter = 0
board.each do |turn|
if turn.downcase == "x" || turn.downcase == "o"
counter += 1
puts "#{counter}"
end
end
counter
end
我还添加了downcase
方法,以便您进行比较是一致的。 否则,如果您要查找x
但数组包含X
,则不会匹配。
我将index
更改为turn
因为您为每个循环声明的实际上不是索引。 它是数组元素本身。
如果要在循环中使用索引,则需要执行以下操作:
board.each_with_index do |turn, index|
您还可以将每个循环作为超级干净的单线执行:
board.each { |t| counter +=1 if ['x', 'o'].include?(t.downcase) }
只是另一个选择。 :-)
我正在尝试计算已占用空间的数量
board = [" ", " x", " ", " ", "O", "O", " ", " ", "X"]
board.count { |s| s != " " } #=> 4
[" ", " x", " ", " ", "O", "1O", " ", " ", "X"].count { |s| s =~ /\S/ }
#=> 4
您可以通过传递要计数的块来对数组进行条件计数,该块对要计数的元素返回true。
在上面的示例中,针对正则表达式对元素进行了测试,以查找字段中除空格以外的任何内容
如果我正确理解了您的问题,我想您想返回占用值的计数。 为此可以使用红宝石助手。 像您的情况:
array = [" ", " x", " ", " ", "O", "O", " ", " ", "X"]
array.reject(&:blank?).count
它将返回一个计数4
。
因此,在这里, reject
将跳过所有空格,并给出存在这些元素的计数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.