2013-02-19 53 views
0

如果我说...保存洗牌阵列的顺序红宝石

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

...它给[1,2,3]。如果相反我说...

a=[1,2,3] 
a.shuffle! 
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在线翻译时发生问题。在我的电脑上使用交互式Ruby解释器会给出正确的结果。感谢大家的帮助!

+0

'a = [1,2,3]' 'b = a.shuffle puts b' ?? – uday 2013-02-19 20:48:44

+0

保存订单意味着什么?我认为这会有所帮助,如果你给了一些周围的代码,以便如何定义和调用此代码。 – 2013-02-19 20:53:02

+2

每次你放一个''都不会给你一个新的订单;它会在您每次运行代码时为您提供一个新的随机顺序,因为这会导致它再次“洗牌”。 – Phrogz 2013-02-19 20:56:02

回答

1

使用上TryRuby.org在线翻译时发生的问题。在我的电脑上使用交互式Ruby解释器会给出正确的结果。感谢大家的帮助!

+0

哇,真是令人沮丧的错误。我要把这个复制到问题中。 – iamnotmaynard 2013-02-20 15:39:58

1

你需要somethinglike此:

a = [1,2,3] 

b = a.shuffle 

puts b 
+0

它给了我一个没有方法的错误? – 2013-02-19 20:52:37

+0

我的坏它应该是'洗牌'不'洗牌' – uday 2013-02-19 20:53:25

+0

谢谢这不保持订单洗牌。每次调用b时,都会给出不同的结果。 – 2013-02-19 20:57:25

0

a.shuffle返回a洗牌,但不改变a本身,所以你需要将结果分配给不同的变量(或a如果这是你想要什么)。如果您希望方法直接更改a,则需要致电a.shuffle!

Why are exclamation marks used in Ruby methods?

+0

如果我说a.shuffle!它会在每次调用数组时给出数组的随机顺序。我该如何保持阵列被洗牌的订单? – 2013-02-19 20:56:35

+0

我想我不确定你的意思。调用'a.shuffle!'混洗数组并将结果存回'a'。你想保留什么订单? – iamnotmaynard 2013-02-19 20:57:28

+0

> 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] – 2013-02-20 06:34:15