LoginSignup
0
1

【Ruby】文字列演算子 <<

Posted at

概要

この記事では、<< 演算子を使用した文字列の連結方法について詳しく見ていきます。

文字列連結方法

Rubyでは文字列の連結にいくつかの方法があります、一般的なのが + 演算子、
次に今回の記事のお題にもなっている << 演算子。

+ 演算子:
「str1 + str2」 という形式で使用される。
str1 と str2 を連結した新しい文字列を作成します。
この操作では、元の文字列は変更されず、新しい文字列オブジェクトが毎回生成されます。

<< 演算子:
「str1 << str2」 という形式で使用される。
str2 の内容を str1 に直接追加します。
この操作は str1 を破壊的に変更し、新しいオブジェクトの生成を伴わないため、メモリ効率が良く、処理速度も速いです。


<< 演算子の利点

大量の文字列データを扱う際に特に有効で、大きなファイルの内容を読み込んで処理を行いたい場合、 + よりも << 演算子を使う方がパフォーマンスが良いです。
理由として、<<演算子は元の文字列に直接追加するため、途中に不要な文字列のオブジェクトが生成されないからです。


使用例

Ruby
sentence = ""
words    = ["hello", "world", "from", "ruby"]

words.each do |word|
  sentence << word << " "
end

puts sentence  
# => "hello world from ruby "

コメントアウトを追加したバーション※上のコードと全く同じです。
コードの各部分が何をしているのか明確に理解するため。

Ruby
# 空の文字列を初期化する。これが最終的に全ての単語を含む文になる。
sentence = ""

# 単語の配列を定義する。
words    = ["hello", "world", "from", "ruby"]

# each文で配列`words`の各要素`word`に対して繰り返し処理を行う。
words.each do |word|

  # ①sentenceに最初の `hello` 追加。
  # ②`" "` でスペースを1つ追加 ➡ これにより単語と単語の間にスペース挿入。
  # ③2が終了した時点で `sentence` には `hello` とスペースが代入されている
  # ④次は二つ目の `world` を同じように `sentence` に追加していく
  sentence << word << " "
end

# ループが完了した後、`sentence` には全ての単語がスペースで区切られて連結されている。
# 全て連結した文を出力する。
puts sentence  

# => "hello world from ruby "

補足説明

sentence で文字列の初期化、これにより最後に文字列を連結するための空の基盤が用意されるのと、プラス後の文字列を代入するためとしても機能する。

each文で配列の繰り返し処理、配列 words の各要素 |word| を順に取り出していく

③文字列連結、sentence << word << " " は、
現在の単語 word とスペース " "sentence に連続して追加。
centence の内容を直接変更 ➡ 破壊的操作

④文字列の出力, puts sentence で完成した長文を出力

まとめ

大量のデータを扱う際や、アプリケーションの効率化を図る際は、メモリとパフォーマンスの観点から << 演算子を使用した方が良さそうです。

参考サイト

https://www.tohoho-web.com/ruby/operators.html
screenshot_01.png

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1