【Rails】文字列_配列_ハッシュの操作について_Railsチュートリアル 4章より

Rails tutorialの第4章を終えました。
その時の気づいたこととか備忘録です。
今回は文字列、配列とハッシュについて
前回はこちらです

【Rails】カスタムヘルパーについて_Railsチュートリアル 4章より - On_The_Backs_Of_The_Flyer

0.準備として

本番リリース以外は
基本的にはマスターブランチはいじらずに
トピックブランチを作るなど
別ブランチで作業をします。
$ git checkout -b rails-flavored-ruby

文字列とメソッド

文字列の操作について、簡単なものであればRails consoleで簡単に見ることができます。
Rails consolの起動は下記コマンドです。

$ rails c

Railsチュートリアルでは文字列の操作について膨大に紹介がありましたが、
ここでは見落としそうな点をいくつかpick upすることにします。

文字列操作

コメント

今更ながらRuby,Railsのコメントは#です。(コメントは言語によって方言があるため念の為)

エスケープについて

文字列を囲むときは、式機能が効かないなどのトラブルを避けるためにダブルクオートが基本
シングルクォートは、¥n¥tといった文字をエスケープせずに「そのまま」保持するときに。

条件について

if文の条件についてひっかけ問題なもので
nil.nil?
とすればnilというオブジェクトはnilか?

Javaではあまり見かけない表現として
puts "x is not empty" if !x.empty?
とすれば、ifの後続がtrueの場合のみ前を実施する。
なおifunlessにしても同等です。


!!nil
nilを論理値に変換しfalseになります

配列について

配列の操作についての簡易的なメモと使い方の例です。

文字列→配列

split

splitメソッドで文字列→配列
a = "fooxbarxbaz".split('x')
文字列"fooxbarxbaz"をxを区切りに配列に分けれます
a =["foo", "bar", "baz"]

%w

%wでも同様に配列にできます。
a = %w[foo bar baz quux]

配列→文字列

joinメソッドで配列→文字列 a配列がある場合、 a.join(', ') a配列を連結した文字列になる。,を引数にすることでカンマ区切りになります。

配列操作

配列の取り出し(基本)

a=[42, 8, 17]という配列を考えます。
8を取り出しだし文字列にするには配列の2番目-1ということで、s = a[1]で取り出せます。
17の場合s = a[2]でも取り出せますが
s = a[-1]と最後から数えた1番目で取り出すこともできます。

またrubyではa.first,a.second,a.lastといった英単語を使用することもできます

sortと破壊的メソッド

s= a.sort
とすることでa配列のソートされた配列がsに代入されます。ただしa配列自体は変更されません s= a.sort!と!をつけることでa配列自体もソートされます(破壊的メソッド)

配列の最後に要素の追加

a.push(6)a << 7とするとa配列の最後に要素を追加されます
またa.push(6).push(8)とかa << "foo" << "bar"とすると、連続で追加することもできます

ハッシュ(連想配列map,list)

文字列をキーにする

ハッシュの作成を考えます。文字列をキーにする場合、

user = { "first_name" => "Michael", "last_name" => "Hartl" }

とすることで

キー
first_name Michael
last_name Hartl

というハッシュが作成され、文字列"first_name"をキーに”Michael”を取り出せます。
"first_name".split('')とすると取り出せます。

ハッシュの操作

シンボルをキーに

'params' というハッシュを定義します。 params = {}

シンボルuserにname,emailを突っ込みます params[:user] = { name: "Michael Hartl", email: "mhartl@example.com" }

こうすることで |キー|キー|値| |-|-|-| |user|name|Michael Hartl|mhartl@example.com| |user|email|Michael Hartl|mhartl@example.com|

という具合にuserというキーの中にname,emailのキーをもつハッシュができます

userのemailを取り出したいときは
params[:user][:email]
とすることで取り出せます。

inspect

inspectメソッドを使うと、要求されたオブジェクトを表現する文字列を返却します

flash = { success: "It worked!", danger: "It failed." }
flash.each do |key, value|
   puts "Key #{key.inspect} has value #{value.inspect}"
 end

Key :success has value "It worked!"
Key :danger has value "It failed."

上記の例ではハッシュのキーをそのまま出力しています。文字列の場合は""をつけて返却します。

参照

blog.livedoor.jp

wealthlabo.com

記事を作成する際の大いに参考になりました。ありがとうございます。