我有下面的代碼過濾:循環執行的Ruby散列,並使用各種方法
self.board.each { |position, piece|
if piece == 'test'
...
end
}
我想知道如果有一種方法來過濾什麼我散列循環結束了嗎?而不是將If語句放在裏面?
我試着用'each'方法對散列上的'選擇'方法,但沒有運氣。
感謝
我有下面的代碼過濾:循環執行的Ruby散列,並使用各種方法
self.board.each { |position, piece|
if piece == 'test'
...
end
}
我想知道如果有一種方法來過濾什麼我散列循環結束了嗎?而不是將If語句放在裏面?
我試着用'each'方法對散列上的'選擇'方法,但沒有運氣。
感謝
你的代碼是慣用的;我看不出有什麼辦法來改善它的表現或清晰度。你可以使用select
一個「預過濾器」,例如:
self.board.select{|a,b|b=='test'}.each do |position,piece|
# Now you are only looking at "test" pieces...
end
但將執行大約兩個迭代循環(而不是隻有一個),並且是不是你的代碼清晰,在我看來, 。唯一的小改進,我可以想像如下:
self.board.each do |position,piece|
next unless piece == 'test'
# ...
end
這樣,你不需要爲你的「主」邏輯縮進的另一個層次。
如果要過濾掉,其關鍵是「三」爲實例的元素:
hash.reject {|key ,value| key == "three" }.each{...}
與任何條件下工作。
只有一點點的變體:
self.board.each { |position, piece|
next unless piece == 1
puts position
}
相反的如果/結束的每個環將跳過你不感興趣的項目
這是正確的,我喜歡的第一個版本。 – Cydonia7
是的,我在看完你的解決方案之後傾向於同意你的看法。無論如何,感謝解決方案,它完美的作品,但我會堅持我目前的代碼:) –