新手问题 关于一个数值的问题

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

ary = Array.new(12){ |i| i+1 } ary.each(|item| if item.to_i % 5 != 0 then ary.delete(item) end ) p ary

被除数是 2 的时候: [2, 4, 6, 8, 10, 12]

被除数是 3 的时候: [2, 3, 5, 6, 8, 9, 11, 12]

被除数是 4 的时候: [2, 4, 6, 8, 10, 12]

被除数是 5 的时候: [2, 4, 5, 7, 9, 10, 12]

请大侠指点指点下 为什么输出结果只有 当被除数是 2 是正常的 如果 是 3,4,5 输出的结果都是错的

2 的时候对仅仅是巧合而已。

给一个可能正确的:

d = 2  # or 3, 4, 5
ary.delete_if { |i| i % 2 != 0 }

LZ 可以把 item puts 出来看看,应该会发现很多 item 都跳过了

ary = Array.new(12){ |i| i+1 }
ary.select! {|item| item % 5 == 0}
p ary

是不是楼主想要的? (ps:一边循环 array 一边删 array 里面的元素怎么感觉不那么靠谱呢。。

#3 楼 @ywjno

在 enumeration 中删 element 就是不靠谱的。

#1 楼 @ashchan 嗯 谢谢 另外问下我写的这个有没可能修改下 得出正确的结果

#2 楼 @jjym puts 出来 没懂刚刚学这个

#6 楼 @ifenx puts 方法和 p 方法

#5 楼 @ifenx 改好后就是我贴的那个。

ary = Array.new(12) { |i| i+1 }
ary.delete_if { |i| i % 2 != 0 }

嗯 明白了 谢谢各位

@ifenx (1..12).map.to_a.select{|item| item % 2 == 0} 或者 (1..12).map.to_a.reject{|item| item % 2 != 0}

不用 Array.new(12) { |i| i+1 } 写这么麻烦的

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