在Ruby中保存混洗数组的顺序

时间:2013-02-19 20:44:18

标签: ruby arrays shuffle

如果我说......

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上使用在线翻译时出现问题。在我的PC上使用交互式Ruby解释器可以得到正确的结果。感谢大家的帮助!

3 个答案:

答案 0 :(得分:1)

你需要这样的东西:

a = [1,2,3]

b = a.shuffle

puts b

答案 1 :(得分:1)

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

答案 2 :(得分:0)

a.shuffle会返回a,但不会更改a本身,因此您需要将结果分配给其他变量(或a如果那是你想要的)。如果您希望该方法直接更改a.shuffle!,则需要致电a

请参阅Why are exclamation marks used in Ruby methods?