繁体   English   中英

红宝石数组迭代,仅计算占用的索引

[英]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|

观点2:

您还可以将每个循环作为超级干净的单线执行:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM