こんにちは! フリーエンジニアの長瀬です。
みなさんはjoinを使っていますか?
joinメソッドを使いこなせば、特定の文字を挟んで配列を連結することができます。
この記事では、rubyのjoinについて
・ 文字列を連結する
・ +(通常の連結メソッド)
・ 数値との連結
・ join(配列を連結)
という基本的な内容から、
・ push (配列の末尾に要素を連結)
・ concat (配列の末尾に要素を連結)
・ 接頭辞(prefix)をつけて連結
・ 大文字にして連結
・ URLを連結する(File#join)
・ Railsのjoinsでテーブルを結合する
といった応用的な内容についても解説していきます。
文字列を連結する
それでは文字列の連結についてみていきましょう!
+(通常の連結メソッド)
まずはじめに紹介するのは「+」メソッドです。
みたまま意味が想像できるわかりやすいメソッドで、連結を行うにあたって一番使用されているメソッドです。
p "ruby" + "python" p "春夏" + "秋冬"
[実行結果]
"rubypython" "春夏秋冬"
このように直感的に文字列を連結することができます。
数値との連結
とても便利な「+」ですが、数値と連結する際は注意が必要です。
p "ruby" + 1
[実行結果]
TypeError: no implicit conversion of Integer into String
このように数字と連結するとエラーが出てしまいます。
これはinteger型とstring型を結合しようとしたからです。
そのため「to_s」メソッドを使用して、integer型をstring型にしてあげる必要があります。
p "ruby" + 1.to_s
[実行結果]
"ruby1"
数値と連結する際には型をしっかり確かめるようにしましょう!
破壊的連結メソッド
文字列の連結メソッドにはレシーバごと変更してしまう、破壊的メソッドが用意されています。
それが「<<」メソッドです。
string1 = "ruby" string2 = "python" string1 + string2 #非破壊的メソッド p string1 string1 << string2 #破壊的メソッド p string1
[実行結果]
"ruby" "rubypython"
「+」で連結した時は、レシーバ自身に変更はありませんが、「<<」で連結した時は、レシーバ自身変更されていることがわかります。
このように同じ連結メソッドでも処理が違うので、注意するようにしましょう!
join(配列を連結)
文字列の連結とは少し離れてしまうかもしれませんが、配列を連結して一つの文字列にする方法をご紹介します。
配列を連結する際に使用するメソッドが「joinメソッド」です。
array = ['ruby', 'python'] p array.join
[実行結果]
"rubypython"
このように配列を連結して一つの文字列にすることができます。
そして、joinには区切り文字を指定できます。
array = ['ruby', 'python','java'] p array.join(',')
[実行結果]
"ruby,python,java"
このように、指定した文字で区切って連結できます。
このようにコンマで区切ればcsv形式で出力したいときに使えます。
また、配列の要素が配列であった場合は
array = [['ruby','rails'],['python','django']] p array.join(' ')
[実行結果]
"ruby rails python django"
このように、平坦化されて出力されます。
push (配列の末尾に要素を連結)
pushメソッドを使えば、配列の末尾に要素を連結できます。
array = ['ruby', 'python','java'] p array.push("swift","php")
[実行結果]
["ruby", "python", "java", "swift", "php"]
このように、配列の末尾に"swift"と"php"を連結できました。
では、配列自体をpushした場合はどうなるでしょうか。
array = ['ruby', 'python','java'] array2 = ["swift","php"] p array.push(array2)
[実行結果]
["ruby", "python", "java", ["swift", "php"]]
このように、配列自体をpushした場合は多次元配列となります。
なので、もしも平坦化したい場合は、flattenメソッド使います。
array = ['ruby', 'python','java'] array2 = ["swift","php"] p array.push(array2).flatten
[実行結果]
["ruby", "python", "java", "swift", "php"]
このように、flattenメソッドによって要素を直接追加した状態と同じ結果になりました。
concat (配列の末尾に要素を連結)
concatメソッドを使えば、pushと同じように配列の末尾に要素を追加できます。
ただ、concatメソッドの場合は、pushと違って、配列自体を連結した場合にflattenメソッドを使って一次元の配列に戻す必要がありません。
array = ['ruby', 'python','java'] array2 = ["swift","php"] p array.concat(array2)
[実行結果]
["ruby", "python", "java", "swift", "php"]
このように、flattenメソッドを使わなくても、一次元の配列として連結できます。
joinをmapと組み合わせて使う
mapメソッドを使えば、配列の各要素に特定の演算を加えることができます。
本記事で紹介しているjoinメソッドとも相性がいいので、いくつか便利な使い方を紹介します。
接頭辞(prefix)をつけて連結
mapメソッドで接頭辞(prefix)をつけてから、joinを使って配列の要素を連結してみましょう。
array = ["joy","grave","rich"] p array.map{|a| "en#{a}"}.join(" ")
[実行結果]
"enjoy engrave enrich"
このように、mapメソッドで配列の要素をブロックに渡したのちに、joinで半角スペースを挟んで連連結しています。
(ちなみに今回はenが先頭に付くと動詞になるものを集めてみました。)
大文字にして連結
次は大文字に変換してからjoinで配列の要素を連結してみましょう。
array = ["joy","grave","rich"] p array.map{|a| a.upcase }.join(" ")
[実行結果]
"JOY GRAVE RICH"
このように、upcaseメソッドを使えば、すべて大文字に変換することができます。
そして、joinで配列の中身を半角スペースを挟んで連結しています。
URLを連結する(File#join)
rubyのjoinには配列クラスのjoinの他にFileクラスのjoinメソッドもあります。
こちらは配列の要素とは関係がなく、ただURLをうまく連結するためのメソッドです。
では実際にサンプルコードで確認していきましょう。
base_url = 'https://www.hoge.com' endpoint1 = 'contact' endpoint2 = 'notification' p File.join(base_url,endpoint1) p File.join(base_url,endpoint2)
[実行結果]
"https://www.hoge.com/contact" "https://www.hoge.com/notification"
このように、相対パスから、絶対パスに変換する際には非常に便利なメソッドです。
Railsのjoinsでテーブルを結合する
Railsには、joinと似たメソッドにjoinsメソッドがあります。
こちらはRailsでテーブル同士を結合するためのメソッドです。
Railsのjoinsメソッドに関してはこちらで詳細に説明してありますので、一読することをおすすめします。
まとめ
今回は、主に特定の文字を挟んで文字の連結ができる「join」をメインに学習をしました。
最後に、ポイントをもう一度おさらいしておきましょう!
・ +(通常の連結メソッド) は基本的な文字の連結に使う。
・ 数値との連結をする場合はto_sで数値を文字に変換する必要がある。
・ join(配列を連結)で特定の文字を指定して配列を連結。コンマでjoinすればcsv形式に変換できる。
・ pushで配列の末尾に要素を連結、配列自体を連結する場合、平坦化するためにはflattenが必要。
・ concatで配列の末尾に要素を連結、 配列自体を連結してもはじめから平坦化されている。
・ 接頭辞(prefix)をつけて連結、joy、grave、richなど先頭にenをつけると動詞になる例を紹介しました。
・ 大文字にして連結、upcaseメソッドを使えばすべて大文字に変換できます。
・ URLを連結する(File#join)、文字の連結ではないjoin。絶対パスを作成する際には使えます。
上記内容を踏まえて、ぜひ自分のプログラムにも積極的に活用していけるように頑張りましょう!
Rubyの文字列をしっかり理解したい方に
この記事は文字列を体系的に解説した3ステップで簡単! Rubyの文字列を 完全理解の一部となります。
文字列をさらに理解したい方はこちらを読んでどんどん理解を深めていくようにしましょう。