【问题标题】:How to shuffle an array the same way every time?如何每次都以相同的方式洗牌?
【发布时间】:2014-04-13 20:14:48
【问题描述】:

调用Array#shuffle 随机打乱一个数组,但我想重复地打乱 - ,每次都以相同的方式。有没有办法呢?例如,我想打电话给shuffle_with_key(123),每次都得到相同的结果。

【问题讨论】:

    标签: arrays ruby shuffle


    【解决方案1】:

    Array#shuffle 可以采用种子Random 实例。

    a = [1,2,3,4]
    seed = 1
    
    a.shuffle(random: Random.new(seed))
    # => [4, 1, 3, 2]
    
    a.shuffle(random: Random.new(seed))
    # => [4, 1, 3, 2]
    

    只需将seed = 1 替换为您想要使用的任何随机种子即可。

    【讨论】:

      【解决方案2】:

      是的,有。看下面:

      (arup~>~)$ pry --simple-prompt
      >> a = [ 1, 2, 3 ]
      => [1, 2, 3]
      >> a.shuffle(random: Random.new(1))
      => [1, 3, 2]
      >> a.shuffle(random: Random.new(1))
      => [1, 3, 2]
      >> a.shuffle(random: Random.new(1))
      => [1, 3, 2]
      >> a.shuffle(random: Random.new(1))
      => [1, 3, 2]
      >> a.shuffle(random: Random.new(1))
      => [1, 3, 2]
      >> a.shuffle(random: Random.new(2))
      => [3, 2, 1]
      >> a.shuffle(random: Random.new(2))
      => [3, 2, 1]
      >> a.shuffle(random: Random.new(2))
      => [3, 2, 1]
      

      阅读shuffle(random: rng) → new_ary的文档

      可选的 rng 参数将用作随机数生成器。

      你的方法看起来像:-

      def shuffle_with_key(ary,rng)
        ary.shuffle(random: Random.new(rng))
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-22
        相关资源
        最近更新 更多