アラフォーからのプログラミングとデザイン

大人から始めたプログラミングとデザインについてのあれこれ

Railsチュートリアル復習中:配列について

f:id:simpledancer:20171214133013p:plain

Railsチュートリアル、今日は文法のところを立ち還りました。

ちなみに昨日通知がきていたのですがUdemy 人気のコースが安くなってました!

こちらは私も購入済み!:Rubyで作る! ビットコイン自動売買システム  

simpledancer.hatenablog.com

splitメソッド

 文字列を自然に変換した配列を得ることができる

>> "foo bar baz".split # 文字列を3つの要素を持つ配列に分割する

=> ["foo", "bar", "baz"]

※splitで文字列を区切って配列にするときにはデフォルトで空白が使われる

他の文字を指定して区切ることもできる。

>> "fooxbarxbazx".split('x')

=> ["foo", "bar", "baz"]

要素のアクセス

railstutorial.jp

配列の要素は0から始まります。配列の要素にアクセスするには[ ]を使う

>> a = [42, 8, 17]

=> [42, 8, 17]

>> a[0] # Rubyでは角カッコで配列にアクセスする

=> 42

>> a[1]

=> 8

>> a[2]

=> 17

>> a[-1] # 配列の添字はマイナスにもなれる!

=> 17 

その他比較演算子、メソッドも同じように使うことができる。

 >> a # 配列「a」の内容を確認する

=> [42, 8, 17]

>> a.last

=> 17

>> a.last == a[-1] # == を使って比較する

=> true

破壊的メソッド

配列の内容を変更したい場合は、そのメソッドに対応する「破壊的」メソッドを使います。破壊的メソッドの名前には、元のメソッドの末尾に「!」を追加したものを使うのがRubyの慣習です。

 >> a

=> [42, 8, 17]

>> a.sort! #ソートする

=> [8, 17, 42]

>> a

=> [8, 17, 42]

sort!メソッドは、配列の要素をソートします。レシーバ自身を変更するメソッドです。戻り値はレシーバ自身です。sortメソッドと同様に順序の比較には<=>演算子が使われます。

ref.xaio.jp

その他

  • pushメソッド(要素の追加)
  • joinメソッド(連結する)

範囲オブジェクト 

www.rubylife.jp

 >> 0..9

=> 0..9

>> 0..9.to_a # 9に対してto_aを呼んでしまっている

NoMethodError: undefined method `to_a' for 9:Fixnum

>> (0..9).to_a # 丸カッコを使い、範囲オブジェクトに対してto_aを呼びましょう

=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 

配列の要素を取り出す

>> a = %w[foo bar baz quux] # %wを使って文字列の配列に変換

=> ["foo", "bar", "baz", "quux"]

>> a[0..2] #0番目から2番目の要素まで取り出す

=> ["foo", "bar", "baz"] 

-1を使うと、配列の長さを知らなくても配列の最後の要素を指定することができ、これにより配列を特定の開始位置の要素から最後の要素までを一度に選択することができます。 

 >> a = (0..9).to_a

=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>> a[2..(a.length-1)] # 明示的に配列の長さを使って選択

=> [2, 3, 4, 5, 6, 7, 8, 9] >> a[2..-1] # 添字に-1を使って選択

=> [2, 3, 4, 5, 6, 7, 8, 9]

文字列の場合の範囲オブジェクト

 >> ('a'..'e').to_a

=> ["a", "b", "c", "d", "e"]

 

配列はRubyの文法を勉強し始めた時になんとなくこんな感じ〜といったように勉強してただけなので細かく見ていくと、あ、なんだそういうことだったのね、というメソッドがたくさんあるのに気づいたのでした。

simpledancer.hatenablog.com