2019/09/15_rubyの配列とeach(忍者の存在を知られないようにする)
まえがき
- 今日も、rubyのアルゴリズム問題を解いたので、新しく私の一部となった知識を記録します。
- 内容は、配列関係です。
例題
以下の配列から、
each
を使って全員をputsしなさい。
ただし、忍者は除くものとする。 (存在を知られちゃいけないので)
edo_people = ["侍","百姓","宣教師","忍者"]
each処理をスキップする
忍者をputsしちゃいけないってことは…
→ 忍者をeach
しないようにするってことなんで、
each
メソッドの対象から外す方法を調べました。
方法1
- まず、要素の最後以外を対象にeachするという発想です。
array[番号].each do ~
という方法を使います。
edo_people = ["侍","百姓","宣教師","忍者"] edo_people[0..2].each do | human | puts human end
解説
each
メソッドの対象である配列の中身を[0..2]
という記載で、「侍(要素番号0)」から「宣教師(要素番号2)」だけに限定します。
問題点
この方法だと- そもそも忍者の位置がわかんない。
- 黒船が来航したので、配列に「ペリー」を追加したい。
といった場合、対応できないです。
方法2
- 次の方法は、値が忍者だったとき、スキップするという発想です。
if
とnext
を使用します。
edo_people = ["侍","百姓","宣教師","忍者"] edo_people.each do | human | next if human == "忍者" puts human end
- 解説
if
とnext
を使って、「もし変数human
の値が忍者だったら、puts
を飛ばす」という処理を追加しました。- ちなみに、↑のコードでは、「後置のif」というやつで記載してます。普通の条件分岐の書き方でもOKです。
これで、「あれ?なんとなく屋根裏に忍者がいる気がする…」といった場合でも、安心して「越後屋、お主悪よのぉ〜」的な密談ができますね。