我写一个玩牌的小游戏,是两副牌的,所以会有两个♠3,而我想实现的功能是,每出一个♠3,就从记录所有牌的数组(这个数组形如:[♠3 ♠3 ♠4 ♠4,,,,,])中删除这一个♠3。
现在的问题是 delete 函数,如果元素重复,会全部删除。两♠3 都被删了!
已经由@blacktulip提出了解决方案:
这样的确可行。但是又出现了新的问题: (为了方便理解,我将 [♠3 ♠3 ♠4 ♠4..,,,,] 记为 [♠3A ♠3B ♠4A ♠4B ..,,,,])
我用的是 a.each do |ele|
当用 a.slice!(a.index(♠3)) 删除掉♠3A 是,这时的♠3B 会向前移动到♠3A 的位置,
即
index:0_123
[.......3A 3B 4A 4B ..,,,,]
变成:
index:01_2
[......♠3B ♠4A ♠4B ..,,,,]
而迭代器却要向前移动一个,指向了 1 的位置,也就是♠4A
这样 ♠3B 就逃过了迭代器
请问怎么能让迭代器从新向前移动一个,让♠3B 接受迭代?
另外,我能否认为,这一系列的问题都是由于使用内部迭代器而造成的?如果我使用外部迭代器是否更方便?