落書きノート

ふと自分が気になった事を書いてます

Ruby 個人的に勉強になることその5 練習問題を解いてみた

今日は疲れるのが早いのでここまでしかできませんでしたが…。「たのしいRuby」(第2版)の練習問題です。3の倍数を配列から取り出して、新しい配列を作ることと、新しい配列を作成せずに、3の倍数以外の値を削除するという問題です。

answer = Array.new(100){|i|
  i + 1
}

puts "answer"
puts answer

answer2 = Array.new
answer.each{|j|
  if j % 3 == 0 then
    answer2 << j
  end
}

puts "answer2"
puts answer2

answer.each{|j|
  if j % 3 != 0 then
    answer[j - 1] = 0
  end
}

answer.delete(0)
puts "answer3"
puts answer

eachメソッド内で要素を削除すると、おかしい動作をしてしまったので、とりあえず該当した要素の添字に0を一旦代入しました。どうせ削除するので値をわかりやすく変更しても大丈夫だろうと思って、こんなコードになりました。それにしてもすっきりしてるなぁと思いました。極力便利な機能を使ってコーディングしようと心がけていましたので。