簡體   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