2012-03-14 12 views
-1

私は(非常に単純な)このように、配列でいくつかの操作をしていた配列の異常な動作。 [OK]をランダム要素

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

は、私がなぜBの変化を理解していない

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

その値のいくつかの回を見てみましょう。私はaとbの違いから無作為の要素をとり、それをbに追加すると仮定したので...どこが間違っていますか?

EDIT:

今日は新しい日で、魔法、同じコードは[OK]を実行します....それは謎 感謝のすべてです!

+3

:https://gist.github.com/8ca38af6a5574fe17417 –

+0

あなたはBを検査するたびに、それは異なる値を持っていることはかなり奇妙に思えます。これは裸のirbセッションのちょうどですか? bをぶら下げようとしている他のスレッドはありませんか? – dbenhur

+0

@dominikhあなたはそのコードで何を手に入れようとしているのですか – Imanol

答えて

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

+0

@Imanolこれには奇妙な動作はありません。あなたの質問をクリアし、何が起こっているかをより良く説明してください。 –

+0

@ismaelga彼の質問は、彼が一度bにプッシュしてから、何回かbを調べることを示しています。各検査では内容が異なるbが表示されますが、初期プッシュ後にbに突然変異メソッドが呼び出されていません。それは奇妙なことです。 – dbenhur

関連する問題