私が知っているように、配列の要素を削除すると、インデックスはまだ前方に移動します。ループ内の要素を削除するときにインデックスを静止させるにはどうすればよいですか?
以下はほんの一例です。この例では、一意の num を持つすべての要素を削除したいと考えていますが、最終的に num '2' が残っています。
class Test
attr_accessor :num
attr_accessor :job
def initialize(num,job)
@num = num
@job = job
end
end
a = []
a << Test.new(1,'jobA')
a << Test.new(2,'jobB')
a << Test.new(1,'jobC')
a << Test.new(3,'jobD')
b = Hash.new
a.each_with_index do |i,index|
#puts i.num,index
if b[i.num] == nil
b[i.num] = true
a.delete(i)
end
end
a.each do |i|
puts i.num,i.job
end
# it shows:
# 2 jobB
# 1 jobC
# I hope to get only:
# 1 jobC
この新しい例では、重複する num '1' が残っている 'jobC' を望み、他の一意の num 要素が削除されることを望みます。
誰かが助けてくれることを願っています, ありがとう!
私は delete_if finally を使用します。私を助けてくれたすべての返信に感謝します。