「Rubyがミニツク」の演習問題を解く vol3

基礎知識レッスンの演習

問題

以下のプロフィールのデータを入れたデータ構造を作成してください。 そして、そのデータ構造から特定のデータを検索して返すsearchメソッドを定義してください。

名前 年齢 住所
静岡 太郎 34歳 静岡県
名古屋 次郎 25歳 愛知県
大津 三郎 19歳 滋賀県

という問題

私の回答・解説

こんな感じだろうか。 ハッシュ使ったり、メソッド作ったり、ループさせたりと
色々使いました。(書き方分からなくて調べながら作りました。)
結構時間がかかってしまった。

模範回答を見てみよう

 1. profiles = [
 2.   {:name => "静岡 太郎", :age => 34, :address => "静岡県"},
 4.   {:name => "名古屋 次郎", :age => 25, :address => "愛知県"},
 5.   {:name => "大津 三郎", :age => 19, :address => "滋賀県"},
 6. ]
 7.  
 8. def search(profiles, key, query)
 9.   profiles.each do |profile|
10.     if query =~ profile[key]
11.       return profile
12.     end
13.   end
14. end
 
search(profiles, :name, /静岡 太郎/)

ほぼ同じですが、模範回答は正規表現を使ってるのがポイントですね。
そこまで頭が回らなかったです。

ただ、この模範回答はちょっとよくない部分がありました。
ageで検索しようとするとエラーになります。
正規表現は文字列の検索しかできないので数値では駄目みたいです。
やるとすると、
ageの値を初めから文字列で持っておくか
正規表現で比較する前に文字列にしておくか
でしょうか。

次回は「Stringクラスレッスンの演習」やります。