taoru's memo

Objective-c,cocos2d,など開発についてのメモ(andoroidも少しだけ)

配列から複数の要素を削除しようとしてはまった

ある配列から、複数の要素を同時に削除しようとしてはまった。

a = ["apple","banana","lemon","orange"]

があったときに、 an を含む要素だけを取り除きたいとする
(bananaとorangeを取り除きたい)

a.each do |youso|
  if(youso =~ /an/)
    a.delete(youso)
  end
end

puts a #=>[apple,lemon]

これだけでいいはずだった。

が、twitterのタイムラインを取得し、@を含むtweetだけ削除しようとしたらなぜか取りこぼしが発生した。

ループ中に削除すると配列がずれるから…?
などと考え、削除したい番号を記録し、逆順に消すというスーパー回りくどいことをした。

#"@"が含まれているtweetを除く
delat = []

timeline.each_with_index do |line,i|
  if(line =~ /\@/)
    puts "@を含むtweetを削除->\n\t",line
    delat.push(i)
  end
end

delat.reverse.each do |i|
  timeline.delete_at(i)
end

スマートな方法がわからない…
とりあえずこれで動いています。

取りこぼしも一個か二個で、毎回同じtweetだったのですが、よくわかりませんでしたorz

QLOOKアクセス解析