2012-03-14 69 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