只需在一副紙牌中使用2-9。在Ruby中創建列表的更有效方式
什麼是首選和/或最有效的方式來獲取在Ruby中創建的套牌?
下面是我的問題,還是我該怎麼做?
deck = []
suits = ["spades", "diamonds", "clubs", "hearts"]
for x in suits
for y in 2..9
w = y.to_s
deck.push(w+" of "+x)
end
end
只需在一副紙牌中使用2-9。在Ruby中創建列表的更有效方式
什麼是首選和/或最有效的方式來獲取在Ruby中創建的套牌?
下面是我的問題,還是我該怎麼做?
deck = []
suits = ["spades", "diamonds", "clubs", "hearts"]
for x in suits
for y in 2..9
w = y.to_s
deck.push(w+" of "+x)
end
end
suits = ["spades", "diamonds", "clubs", "hearts"]
deck = suits.product((2..9).to_a).map { |x,y| "#{y} of #{x}" }
如果希望所有52張牌:
suits = ["spades", "diamonds", "clubs", "hearts"]
faces = { 1 => 'Ace', 11 => 'Jack', 12 => 'Queen', 13 => 'King' }
deck = suits.product((1..13).to_a).map { |x,y| "#{faces[y]||y} of #{x}" }
# => Ace of spades, 2 of spades, ..., King of spades, Ace of diamonds, etc.
如何:
suits.flat_map {|s| (2..9).map{|r| "#{r} of #{s}"}}
嗯,你可以只使用地圖:
suits = ["spades", "diamonds", "clubs", "hearts"]
deck = suits.map { |d| (2..9).map { |x| "#{x} of #{d}" } }.flatten
但效率卻大致相同。
我喜歡product
瓦特/塊
a, suits = [], ["spades", "diamonds", "clubs", "hearts"]
suits.product((2..9).to_a) {|t,n| a << "#{n} of #{t}"}
suits, values, deck = %w(spades hearts diamonds clubs), [*2..9], values.product(suits).map { |card| card * ' of ' }