【问题标题】:ruby array iteration, counting only occupied indicesruby 数组迭代,只计算占用的索引
【发布时间】:2017-07-14 13:27:19
【问题描述】:

我正在尝试计算占用空间的数量,然后从#turn_count 返回该计数。现在我正在返回原始数组。

我也在计算每次迭代,而不是占用的索引。

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
  • @ndn,当我返回计数器时,我得到 9,但我想要 4。
  • @dax,我只想统计占用的board[index],跳过空的,然后返回4,即占用索引的数量(带有x和o)。
  • @ndn 我得到了图片。 ==

标签: arrays ruby iteration


【解决方案1】:

您只需要在函数末尾返回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) }

只是另一种选择。 :-)

【讨论】:

  • 您实际上指出了我的代码的问题,==,大写与小写。这些都是我必须注意的。你真的帮助我摆脱困境。谢谢!
  • 完全没问题。欢迎来到红宝石!一旦你更熟悉它,你就会爱上它。太棒了。
【解决方案2】:

我正在计算占用空间的数量

board = [" ", " x", " ", " ", "O", "O", " ", " ", "X"]
board.count { |s| s != " " } #=> 4

【讨论】:

  • 不错。在 Rails 中,它会更短:board.count(&:present?)
  • 给出5,而不是4,因为一个条目有多个空格
【解决方案3】:
[" ", " x", "    ", " ", "O", "1O", "    ", " ", "X"].count { |s| s =~ /\S/ }
  #=> 4

您可以通过将一个块传递给 count 来对数组进行条件计数,该块对于您要计数的元素返回 true。

在上面的例子中,元素是针对正则表达式进行测试的,在字段中寻找除空格以外的任何内容

【讨论】:

  • @IanKenney,感谢您的编辑。您可能已经注意到我回滚到原来的答案。那是由于我的混淆,与我对另一个问题的回答有关。当我看到我的错误时,我把你的评论回复了。很好的编辑。
【解决方案4】:

如果我正确理解您的问题,我猜您想返回占用值的计数。 可以在 ruby​​ 助手中执行此操作。就像你的情况一样:

array = [" ", " x", " ", " ", "O", "O", " ", " ", "X"]

array.reject(&:blank?).count 它将返回计数4

所以在这里,reject 将跳过所有的空格并给出这些元素的数量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-22
    • 2021-05-15
    • 1970-01-01
    • 2021-06-08
    • 2022-12-20
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    相关资源
    最近更新 更多