【Ruby】配列のサイズを取得するメソッドの使い分け | length/size/count

みなさんこんにちは!

今回の記事は、

悩みを抱えた人
・Rubyで配列のサイズを取得したい
・いくつかメソッドがあるけど、どれを使えばいいの?
・length/size/countメソッドの違いが知りたい

というお悩みを解決する記事になっています。


この記事の内容

・length/size/countメソッドの使い方
・length/sizeメソッドとcountメソッドの違い
・length/sizeメソッドとcountメソッドの使い分け


傍楽たろう
なお、配列の便利なメソッドを用途別にもまとめてありますので、こちらもぜひ合わせてご覧になってくださいね。

>> 配列を初期化する方法
>> 配列に要素を追加する方法
>> 配列から要素を削除する方法
>> 配列の要素を検索する方法



配列とは

配列とは、任意のオブジェクトを複数まとめた上で、それらを同じように取り扱える/それらに対して同じ処理を加えられるようにしたオブジェクトです。

詳細については以下の記事にて詳しくご説明していますので、「まだ配列のイメージがイマイチ掴めていない…」という方はまずはこちらの記事からご覧くださいね。

おすすめ記事

今回は、Rubyの配列(Array)の基本的な使い方についてご紹介させていただきます。 Webアプリケーションを開発する中で、配列は必ずと言ってよいほど使用することとなるオブジェクトになります。 そのため、今回ご紹介する、基本[…]

プログラミングイメージ

Rubyで配列のサイズを調べるためのメソッドたち

今回ご紹介しようと思っているメソッドは、以下の3種類になります。

  • 1. lengthメソッド
  • 2. sizeメソッド
  • 3. countメソッド

それぞれの主な用途や使い方、そして具体例を交えながらご説明させていただきますね。

lengthメソッド

まずご紹介するのは、lengthメソッドです。

lengthメソッドは、その名の通り、配列の要素の数を返してくれます

irb(main):001:0> array = ["Ruby", "Rails", "Javascript", "Go", "PHP"]
irb(main):002:0> array.length
=> 5

今回使用しているのは、Arrayクラスのlengthメソッドですが、Stringクラスにもlengthメソッドは存在しています。

Stringクラスのlengthメソッドも使い方自体は全く同じで、文字列に対して呼び出すと、そのレシーバの文字数を返却してくれます。

irb(main):001:0> word = "傍楽ブログ"
irb(main):002:0> word.length
=> 5

同じメソッド名なので、クラスの違いについて意識することは少ないかもしれませんが、せっかくなのでこちらも覚えておきましょうね。

sizeメソッド

続いてご紹介するのは、sizeメソッドです。

こちらのsizeメソッドですが、なんと先述のlengthメソッドと全く同じ動きをします

irb(main):01:0> array = ["Ruby", "Rails", "Javascript", "Go", "PHP"]
irb(main):02:0> array.size
=> 5

両者はエイリアスの関係で中身は全く同じ実装になっていますので、使いやすい方を使っていく形で問題ありません(私的にはsizeの方がしっくりきます)。

また、lengthメソッドと同様に、Stringクラスにも実装されていますので、同じ使い方で文字列の長さを取得することも可能です。

irb(main):001:0> word = "傍楽ブログ"
irb(main):002:0> word.length
=> 5

countメソッド

最後にご紹介するのは、countメソッドです。

countメソッドは、これまでのlengthメソッド/sizeメソッドとは違って、引数やブロックを取ることができます。

ここからは、以下の3種類の使い方について順に解説していきます。

  • 引数を指定せず使用する
  • 引数を指定して使用する
  • ブロックを渡して使用する

引数を指定せず使用する

まずは、引数を指定せずにcountメソッドを使用する場合です。

こちらはlengthメソッドやsizeメソッドと同じで、引数を指定しなかった場合には、配列内の要素の数を返却してくれます。

irb(main):001:0> array = ["Ruby", "Rails", "Javascript", "Go", "PHP", "Ruby", "Java"]
irb(main):002:0> array.count
=> 7

引数を指定して使用する

続いては、引数を指定して使用する場合です。

引数を指定すると、その引数に合致した要素の数を返却してくれます。

irb(main):001:0> array = ["Ruby", "Rails", "Javascript", "Go", "PHP", "Ruby", "Java"]
irb(main):002:0> array.count("Ruby")
=> 2

上記の通り、配列内の特定の要素の数が知りたい場合には、countメソッドの引数を設定するようにしましょう。

ブロックを渡して使用する

最後は、ブロックを渡して使用する場合について解説します。

先ほどは、単に引数を渡していましたが、countメソッドにはブロックを渡すことも可能で、ブロックを渡すことで、少し複雑な条件に合致した要素の数を取得することができるようになります。

例えば、下記の例では、文字数が4文字の要素の数を取得する処理を実装しています。

irb(main):001:0> array = ["Ruby", "Rails", "Javascript", "Go", "PHP", "Ruby", "Java"]
irb(main):002:1* array.count do |name|
irb(main):003:1*   name.size == 4
irb(main):004:0> end
=> 3

length/sizeメソッドとcountメソッドの違いは?

さて、ここで一つ疑問が生じますよね。

そう、「length / sizeメソッドとcountメソッドって、”配列内の要素の数を数える”っていう機能は基本的に同じだから、色々な使い方ができるcountメソッドだけ覚えていたらいいんじゃない?」と思いませんか?

結論から申し上げると、単純に「配列内の要素の数を数える」だけであれば、length / sizeメソッドを使用するようにしましょう

それは、処理速度の違いにあります。

length / sizeメソッドは配列の持っている要素情報を直接参照している一方で、countメソッドはeachメソッドを介して数を数えているため余計なプロセスが一つ多く、その処理速度も必然的に遅くなってしまうのです。

よって、配列のサイズを取得する際のメソッドに困った場合には、以下の基準で選択しましょう。

メソッドシチュエーション
lengthメソッド配列のサイズを知りたい場合
sizeメソッド同上
countメソッド特定の条件に合致する要素の数を知りたい場合

お仕事の途中ですが、少し一休みして、転職独立について考えてみませんか🙌?

現役エンジニアが選ぶおすすめの転職エージェント11選【成功談・失敗談もあります】

レバテックフリーランスの評判ってどう?【現役エンジニアが徹底解説します】

MidWorks(ミッドワークス)の評判ってどう?【現役エンジニアが徹底解説します】

日々の業務に追われて自分を見失わないよう、
定期的にキャリアを振り返るようにしておきましょう🤲

最後に

さて、本記事では、配列のサイズを調べるためのメソッドとして、lengthメソッド、sizeメソッド、countメソッドの3つをご紹介してきました。

最後の章でもご紹介した通り、countメソッドが便利だからと言ってそればかり使用していると、思わぬところで処理速度の低下を招いてしまいますので、注意しておきましょうね。

なお、Rubyの配列処理についてもう少し踏み込んで知りたい方は、以下の記事にて便利なメソッドをまとめてありますので、よければこちらもぜひご覧くださいね。

おすすめ記事

今回は、Ruby初心者の方々に向けて、配列(Array)を扱う際に最低限知っておくべきメソッドをご紹介させていただきます。 Webアプリケーションを開発する中で、配列は必ずと言ってよいほど使用することとなるオブジェクトになります。 […]

プログラミングイメージ

このブログを通じて少しでも「傍(はた)を楽(らく)にする」ことができていれば嬉しく思います。

最後まで読んで頂きありがとうございました。