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