2012-03-14 72 views
-1

我在做一些操作使用數組,像這樣的(很簡單)數組中的奇怪行爲。隨機元素

a = [1, 2, 3, 4] 
b = [1] 
b.push((a-b).sample) 
=> [1, 2] 

好吧,讓我們看到了一些時間的價值

b 
=> [1, 2] 
b 
=> [1, 3] 
b 
=> [1, 2] 
b 
=> [1, 4]  

我不明白爲什麼b變爲。我認爲我從a和b之間的差異中隨機抽取了一個元素,並將它附加到b,所以...我錯在哪裏?

編輯:

今天是新的一天,而奇妙的是,同樣的代碼運行正常....這是一個謎 感謝的一切!

+3

我不能重現:https://gist.github.com/8ca38af6a5574fe17417 – 2012-03-14 23:59:03

+0

這似乎很奇怪的是,每次檢查B檢查的時間有不同的價值觀。這只是在裸露的irb會話?有沒有其他線程提及b掛在附近? – dbenhur 2012-03-14 23:59:12

+0

@dominikh你得到了我應該得到的代碼 – Imanol 2012-03-15 00:06:41

回答

0

這是你期望得到的嗎?

a = [1,2,3,4] 
b = [] 
0.upto(3) do 
    b.push((a-b).sample) 
    puts b 
end 

    #=> [2] 
    #=> [2, 4] 
    #=> [2, 4, 1] 
    #=> [2, 4, 1, 3] 
+0

是的。我只想獲得一個隨機元素並將其添加到現有數組中,但我不希望那些在更改之前獲得的隨機元素。 你知道我爲什麼會得到這種奇怪的行爲嗎?爲什麼我推入b的元素多次改變? – Imanol 2012-03-15 00:14:47

+0

@Imanol對此沒有奇怪的行爲。嘗試清除你的問題,並更好地解釋發生了什麼 – 2012-03-15 00:21:00

+0

@ismaelga他的問題表明他推動一次b,然後幾次檢查b。每次檢查顯示b具有不同的內容,但在初始推送後沒有在b上調用變異方法。這很奇怪。 – dbenhur 2012-03-15 00:27:04