A

プログラミングの学習記録

【本日の学習内容:Ruby課題10~16】

共同開発講座のRuby課題10~16について学習しました。

 

✅配列.map(&:メソッド)記法

 

1️⃣配列.map(&:メソッド)記法を使わない場合

 

programming_languages = %w(ruby php python javascript)

upper_case_programming_languages = %w(ruby php python javascript)

 

programming_languages.map!{|programming_language| programming_language.capitalize}

  

  upper_case_programming_languages.map!{

    |upper_case_programming_language| upper_case_programming_language.upcase}

 

  p programming_languages

  p upper_case_programming_languages

 

 

2️⃣配列.map(&:メソッド)記法を使った場合

 

programming_languages = %w(ruby php python javascript)

upper_case_programming_languages = %w(ruby php python javascript)

 

  programming_languages.map!(&:capitalize)

  upper_case_programming_languages.map!(&:upcase)

 

  p programming_languages

  p upper_case_programming_languages

 

 

配列.map(&:メソッド)記法を使った場合ほうがシンプルに書ける!!

そしてさらにリファクタリングすると、、

programming_languages = %w(ruby php python javascript)

  

  programming_languages.map!(&:capitalize)  

  upper_case_programming_languages = programming_languages.map(&:upcase)

 

  p programming_languages

  p upper_case_programming_languages

 

もっとシンプルに書けた!!

 

 

✅文字列や配列に対して、指定した文字列が存在するか確認する

include?メソッドを使う。

オブジェクト名.include?("検索文字列")

参考:https://www.sejuku.net/blog/57039

 

指定した文字列が存在した場合はTrue、存在しない場合はFalseを返す。

 

foods = %w(たこ たこめし うに いか たこ焼き オクラ軍艦 みずだこ)

 

  foods.each do |food|

    if food.include?("たこ")

      puts "好物です。"

    else

      puts "まぁまぁ好きです。"

    end

  end

 

出力結果

 

好物です。

好物です。

まぁまぁ好きです。

まぁまぁ好きです。

好物です。

まぁまぁ好きです。

好物です。

 

 

 

✅二次元配列

配列の中に要素として配列が格納された形の配列。

 

✅多次元配列

二より大きい次元を持つ配列。

 

 

✅二次元配列や多次元配列を一次元配列にする

flattenメソッドを使う。

多次元(もしくは二次元)配列.flatten

flatten!メソッドも用意されている。

参考:https://www.sejuku.net/blog/70437

 

 

sports = ["サッカー", "バスケ", "野球", ["フットサル", "野球"], "水泳", "ハンドボール", ["卓球", "サッカー", "ボルダリング"]]

 

p sport2 = sports.flatten

 

出力結果

["サッカー", "バスケ", "野球", "フットサル", "野球", "水泳", "ハンドボール", "卓球", "サッカー", "ボルダリング"]

 

 

✅配列から重複した要素を取り除く

uniqメソッドを使う。

配列.uniq

uniq!メソッドも用意されている。

参考:https://www.javadrive.jp/ruby/array_class/index8.html

 

ary = [1, 2, 5, 2, 3, 5]

p newary = ary.uniq

 

出力結果

[1, 2, 5, 3]

 

✅二次元以上のハッシュの値を取得する

 

参考:https://shinkufencer.hateblo.jp/entry/2018/11/01/233000

 

hash = {a: {b: "val"}}

p hash[:a][:b]

 

出力結果

"val"

 

✅ハッシュに別のハッシュの内容を統合した新しいハッシュを返す

merge(update)メソッドを使う。

ハッシュ.merge(統合する別のハッシュ)

参考:https://qiita.com/jnchito/items/02ba8aad634a6bd8a2f6

 

merge!メソッドも用意されている。

 

currencies = { japan: 'yen' }

others = { us: 'dollar', india: 'rupee' }

currencies.merge(others)

#=> {:japan=>"yen", :us=>"dollar", :india=>"rupee"}

 

# 元のハッシュは変更されない

currencies

#=> {:japan=>"yen"}

 

 

別のハッシュに同じキーがあった場合は、別のハッシュの値が使われる。

currencies = { japan: 'yen' }

others = { japan: '円' }

currencies.merge(others)

#=> {:japan=>"円"}

 

 

✅ハッシュに含まれるキーの一覧を配列として取得する

keysメソッドを使う。

ハッシュ.keys

参考:https://www.javadrive.jp/ruby/hash/index8.html

 

 

ハッシュに含まれるキーを要素とする配列オブジェクトを返す。

 

hash = {name:  "西野", age: 25}

p array = hash.keys

 

出力結果

[:name, :age]

 

✅ハッシュに含まれる値の一覧を配列として取得する

valuesメソッドを使う。

 

hash = {name:  "西野", age: 25}

p array = hash.values

 

出力結果

["西野", 25]

 

✅ハッシュに含まれるキーと値のペアを1つの配列として作成し、その配列を要素として持つ配列として取得する。

 

hash = {name:  "西野", age: 25}

p array = hash.to_a

 

出力結果

[[:name, "西野"], [:age, 25]]