10

学習目的で、これは何と呼ばれますか? 作成されるオブジェクトは配列またはハッシュですか?

stack_of_cards = []

これは私がそれを埋める方法です:

stack_of_cards << Card.new("A", "Spades", 1)
stack_of_cards << Card.new("2", "Spades", 2)
stack_of_cards << Card.new("3", "Spades", 3)
...

ここに私のカードクラスがあります:

class Card

  attr_accessor :number, :suit, :value

  def initialize(number, suit, value)
    @number = number
    @suit = suit
    @value = value
  end

  def to_s
    "#{@number} of #{@suit}"
  end
end

この配列/ハッシュの要素をシャッフルしたいのですが (これを何と呼びますか? :S)

助言がありますか?

4

8 に答える 8

21
stack_of_cards.shuffle

これは配列です。詳細については、 http: //www.ruby-doc.org/core-1.8.7/classes/Array.html を参照してください。

新しい配列を返す関数形式を書きましたが、シャッフルされるのは新しい配列です。代わりに以下を使用できます。

stack_of_cards.shuffle!

...配列をその場でシャッフルします。

于 2011-02-20T22:54:49.780 に答える
12

ハッシュをシャッフルしたい場合は、次のようなものを使用できます。

class Hash
  def shuffle
    Hash[self.to_a.sample(self.length)]
  end

  def shuffle!
    self.replace(self.shuffle)
  end
end

「ルビーシャッフルハッシュ」を検索すると常にこの質問が見つかるため、この回答を投稿しました。

于 2012-12-17T17:43:32.380 に答える
1

shuffle メソッドの使用に加えて、sort メソッドを使用できます。

array.sort {|a, b| rand <=> rand }

これは、実装されていない古いバージョンの Ruby を使用している場合に役立ちshuffleます。と同様にshuffle!、 を使用sort!して既存の配列を操作できます。

于 2011-02-21T00:34:27.443 に答える