我怎样才能在Ruby中改组数组/哈希?

9 ruby shuffle

出于学习目的,这叫什么?是创建对象是数组还是哈希?

stack_of_cards = []
Run Code Online (Sandbox Code Playgroud)

这就是我填写它的方式:

stack_of_cards << Card.new("A", "Spades", 1)
stack_of_cards << Card.new("2", "Spades", 2)
stack_of_cards << Card.new("3", "Spades", 3)
...
Run Code Online (Sandbox Code Playgroud)

这是我的卡类:

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
Run Code Online (Sandbox Code Playgroud)

我想改组这个数组/哈希中的元素(这叫做什么?:S)

有什么建议?

Dig*_*oss 20

stack_of_cards.shuffle
Run Code Online (Sandbox Code Playgroud)

它是一个数组,有关详细信息,请参阅http://www.ruby-doc.org/core-1.8.7/classes/Array.html.

我已经编写了函数形式,它返回一个新的数组,并且它是新的一个被洗牌的.你可以改用:

stack_of_cards.shuffle!
Run Code Online (Sandbox Code Playgroud)

......将阵列原位洗牌.


2ca*_*aos 10

如果你想要改组哈希,你可以使用这样的东西:

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

  def shuffle!
    self.replace(self.shuffle)
  end
end
Run Code Online (Sandbox Code Playgroud)

我发布了这个答案,因为如果我搜索"ruby shuffle hash",我总会发现这个问题.

  • +1,一个好主意,但怎么样:`哈希[self.to_a.shuffle]` (2认同)