-1

私はカード デッキ ジェネレーターを作成しています。ここに私が思いついた解決策がありますが、複数の行にまたがっていて見栄えがよくないことがわかりました。このカードを作成する他の方法はありますか?

deck = []
'23456789TJQKA'.each_char do |rank|
  'SHDC'.each_char do |suit|
    deck << rank + suit
  end
end
4

3 に答える 3

5

を使用Array#productして、2 つの配列からデカルト積を生成できます。

# ruby 2.0
deck = '23456789TJQKA'.chars.product('SHDC'.chars).map{|a| a.join}

# ruby 1.9
deck = '23456789TJQKA'.split(//).product('SHDC'.split(//)).map{|a| a.join}

DNNXコメントし.map(&:join)たように、短いものを取得するために使用できます。

ただ、コンパクトに書くよりは、すっきりしたプログラムを書いたほうがいいと思います。

于 2013-03-29T14:11:12.320 に答える
0

Arie が提案したように、短いプログラムよりも明確なプログラムを作成する方が良いです。これは非常に単純だと思います:

deck = %w(2S 2H 2D 2C
          3S 3H 3D 3C
          4S 4H 4D 4C
          5S 5H 5D 5C
          6S 6H 6D 6C
          7S 7H 7D 7C
          8S 8H 8D 8C
          9S 9H 9D 9C
          TS TH TD TC
          JS JH JD JC
          QS QH QD QC
          KS KH KD KC
          AS AH AD AC)

冗談だ。

于 2013-03-29T14:29:55.047 に答える
0

ブロックバリアントの使用例としてproduct(other_ary, ...) { |p| block }

deck = []
'23456789TJQKA'.split('').product('SHDC'.split('')){|el| deck << el.join}
于 2013-03-29T14:25:01.993 に答える