新手问题 请教 迭代器和 for 的一个问题

ifenx · 2013年02月22日 · 最后由 ifenx 回复于 2013年02月22日 · 2249 次阅读

1) a = Array.new(100){|i| i+1} b = Array.new for i in 0...a.length if (a[i].to_i % 3) == 0 then b << a[i] a.delete_at(i) end end

p b p a

2) a = Array.new(100){|i| i+1} b = Array.new a.each_with_index{|item,i| if item.to_i % 3 == 0 then b << item a.delete_at(i) end }

p b p a

运行结果:

1) [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil] [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 20, 22, 23, 25, 26, 28, 29, 31, 32, 34, 35, 37, 38, 40, 41, 43, 44, 46, 47, 49, 50, 52, 53, 55, 56, 58, 59, 61, 62, 64, 65, 67, 68, 70, 71, 73, 74, 76, 77, 79, 80, 82, 83, 85, 86, 88, 89, 91, 92, 94, 95, 97, 98, 100]

2) [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99] [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 20, 22, 23, 25, 26, 28, 29, 31, 32, 34, 35, 37, 38, 40, 41, 43, 44, 46, 47, 49, 50, 52, 53, 55, 56, 58, 59, 61, 62, 64, 65, 67, 68, 70, 71, 73, 74, 76, 77, 79, 80, 82, 83, 85, 86, 88, 89, 91, 92, 94, 95, 97, 98, 100]

麻烦 帮忙看看 1)是什么问题 为什么会有 nil

a.delete_at xx 之后,a 长度没有 100 了。

之后取到的是 nil, to_i 之后是 0, %3 自然 == 0

需要 登录 后方可回复, 如果你还没有账号请 注册新账号