2013-02-19 45 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