作者goodplace (hello)
看板Ruby
标题[问题] 关於Array
时间Thu Oct 22 19:43:21 2009
环境:
Ruby 1.9.1
状况:
得到非预期的结果
附录:
以下是我的code:
$ans = []
def perm(a,n,k,t)
if t == k
p a
$ans << a
else
0.upto(n-1){|i|
a[t] = i
perm(a, n-i, k, t + 1)
}
end
end
a = []
perm(a,2,2,0)
p $ans
*************
output 竟然是:
[0, 0]
[0, 1]
[1, 0]
[[1, 0], [1, 0], [1, 0]]
应该是
[0, 0]
[0, 1]
[1, 0]
[[0, 0], [0, 1], [1, 0]]
才对不是吗?
我只不过把"a" push进array $ans,
为什麽最後每个element都变得一样?
用Ruby 1.8.6测试过 也是得到非预期的结果
谢谢各位看完我的问题!
希望能找到原因...(我花了一个小时却找不出原因 ~_~)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.109.23.162
1F:推 godfat:因为你不断改写 a, $ans 实际上是 [a, a, a] 10/22 20:46
2F:→ godfat:因此 $ans << a 要改成 $ans << a.dup 才不会都是同个array 10/22 20:46
3F:→ poga:把a想成是个reference (光这样讲听的懂就神了 10/22 20:47
4F:→ poga:噗,被抢先回正解了(遮脸 10/22 20:49
5F:→ godfat:我还有开 irb 测试哩(遮脸 10/22 20:52
6F:→ goodplace:感谢!! 10/22 21:07