【问题标题】:Saving the order of a shuffled array in Ruby在 Ruby 中保存洗牌数组的顺序
【发布时间】:2013-02-19 20:44:17
【问题描述】:

如果我说...

a = [1,2,3]
a.shuffle
puts a

...它给出 [1,2,3]。如果我说……

a=[1,2,3]
a.shuffle!
puts a

...每次我说 puts a 时,它都会给我一个新订单。所以我的问题是如何保存乱序数组的顺序?如果它第一次返回 [3,1,2] 它应该保持这个顺序。这有意义吗?

这是我所说的一个例子。每次我调用 b 我都会得到不同的结果。

> a=[1,2,3]
=> [1, 2, 3]
> b=a.shuffl­e!
=> [1, 3, 2]
> b
=> [1, 2, 3]
> b
=> [2, 1, 3]
> b
=> [1, 3, 2]
> b
=> [3, 2, 1]

“b”似乎指的是函数 a.shuffle 而不是 shuffle 本身的结果。

答案:

在 TryRuby.org 上使用在线解释器时出现问题。在我的 PC 上使用交互式 Ruby 解释器可以得到正确的结果。感谢大家的帮助!

【问题讨论】:

  • a = [1,2,3] b= a.shuffle puts b ??
  • 保存订单是什么意思?我认为如果您提供一些周围的代码来定义和调用此代码等会有所帮助。
  • 不是每次你puts a都给你一个新订单;每次运行代码时它都会给你一个新的随机顺序,因为这会导致它再次成为shuffle!d。
  • 我的意思是如果它把数组洗牌到 [3,1,2] 那么每次 a 被调用之后它应该给出 [3,1,2]。

标签: ruby arrays shuffle


【解决方案1】:

你需要这样的东西吗:

a = [1,2,3]

b = a.shuffle

puts b

【讨论】:

  • 我的错应该是shuffle 而不是shuffled
  • 谢谢,这不会保持 a 被洗牌的顺序。每次调用 b 都会给出不同的结果。
【解决方案2】:

在 TryRuby.org 上使用在线解释器时出现问题。在我的 PC 上使用交互式 Ruby 解释器可以得到正确的结果。感谢大家的帮助!

【讨论】:

  • 哇,多么令人沮丧的错误。我将把它复制到问题中。
【解决方案3】:

a.shuffle 返回a 的改组,但不会更改a 本身,因此您需要将结果分配给不同的变量(或a,如果这是您想要的)。如果要直接更改a的方法,需要调用a.shuffle!

Why are exclamation marks used in Ruby methods?

【讨论】:

  • 如果我说 a.shuffle!每次调用时,它都会为数组提供随机顺序。如何保持数组被洗牌的顺序?
  • 我想我不确定你的意思。调用a.shuffle! 会打乱数组并将结果存储回a。你想保持什么顺序?
  • > a=[1,2,3] => [1, 2, 3] > b=a.shuffle! => [1, 3, 2] > b => [1, 2, 3] > b => [2, 1, 3] > b => [1, 3, 2] > b => [3, 2 , 1]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-11
  • 2022-11-27
  • 1970-01-01
  • 1970-01-01
  • 2012-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多