【初心者向け】Rubyプログラミングで配列の要素数を数える方法

プログラム

プログラミングを学習していると、複数のデータを1つの変数に代入したい!と思うことがあります。
そこで“配列”というデータ形式をよく使います。
大抵のプログラミング言語で見られるとても便利なデータ形式ですね。
色んなデータを突っ込んで変数として格納しておけるので、よく使われます。
配列を活用していると途中で、「あれ?配列の中のデータって何個だっけ?知りたいな」ってことがよくあります。
例えば、ユーザが持ってるデータが何件か、データベースから取り出したデータが何件か、とかです。
Rubyの配列データには、便利な仕組みがいくつも用意されていて、1から数えなくても簡単に配列内のデータ数を返してくれます!
そこで、今回はRubyプログラミングで配列内のデータ数を取り出す方法を紹介していきます!

size

最初に、sizeを使った方法を紹介します。
書き方は以下の通りです。

配列名.size

記述がシンプルで、sizeの通り配列のサイズを意味していて分かりやすいですね。
それでは、実際にコードを書いてみましょう。

size.rb
array = ['a', 'b', 'c', 'd', nil, 'e']
print array.size

実行してみましょう。

$ruby size.rb 
6

nilを含めた配列のデータ数をちゃんと表示してくれました。
実は、このsizeは文字列の文字数を数えるのにも使うことができます。
使い方は配列の要素数を数える時と一緒です。

文字列.size

このsizeは配列の要素数を数えるだけでなく、文字列の文字数を数えたり、他の用途にもシンプルに使えてとても重宝しますね♪

length

続いて、lengthを使った方法を紹介していきます。
書き方はこのようになります。

配列.length

これまで紹介してきたsizeやcountと同様に理解しやすい記述ですね。

length.rb
array = ['a', 'b', 'c', 'd', nil, 'e']
print array.length

実行してみましょう。

$ruby length.rb 
6

配列の要素数を出力できました。
このlengthは文字列の文字数を数えるのにも使うことができます。
使い方は配列の要素数を数える時と一緒です。

文字列.length

使い方も使い道もsizeとほぼ一緒ですね。
では、sizeとlengthは何が違うんでしょうか?
公式ドキュメントを見ても、実は厳密に違いは無いようです。
instance method Array#length
なので、好みな方を使いましょう!笑

count

続いて、countを使った方法を紹介していきます。
書き方は、以下の通りです。

配列.count

こちらも先程のsizeと同様に単語から連想できて分かりやすいですね。
しかも記述がシンプルです。
それでは、実際にコードを書いてみましょう。

count.rb
array = ['a', 'a', 'a', nil, 'b', 'b', nil, 'c']
puts array.count
puts array.count('a')
puts array.count('b')
puts array.count('c')
puts array.count(nil)

実行してみましょう。

$ruby count.rb
6
3
2
1
2

countだけだと配列内の全データ数を返してくれますが、
実は引数を入れることで、その引数に一致したデータの数を返してくれます。
今回だと’a’に一致しているのは3件と表示されていますね。
このように、countは引数を指定して、一致したデータ数を返してくれる関数のように使うことができます。
データベースから取り出すデータの条件を指定する様に、とても汎用的に扱うことができますね♪
他にも様々な使い方ができるので、詳しく知りたい方は以下の公式ドキュメントを参考にしてみてくださいね。
instance method Array#count

応用編:countでnilを除いた要素数を数える方法

先程のcount関数では、nilを含めた要素数を数えてくれましたが、「nilだとデータ自体が存在しないんだし、nil以外のデータを数えてー」というニーズがあるかと思います。
その場合、count関数の引数をこのように少し改良します。

配列.count{|任意の要素名|!任意の要素名.nil?}

先程、count関数は引数に一致したデータの数を返してくれると説明しました。
{}で表されるブロックを指定した場合、ブロック内の条件式に一致する要素数を返してくれます。
つまり、細かく条件を指定して要素数を数えることが可能なのです!
以下の幾つかの使用例のコードを書いてみましょう。

count_advance.rb
array = ['a', 'a', 1, nil, 'b', 2, nil, 'c']
#nil以外の要素数
puts array.count{|content|content.nil?}
#nilの要素数
puts array.count{|content|!content.nil?}
#文字列の要素数
puts array.count{|str|str.is_a?(String)}
#数値の要素数
puts array.count{|num|num.is_a?(Numeric)}

実行してみましょう。

$ruby $count_advance.rb
2
6
4
2

このように、is_a?関数を使ってデータ型が一致する要素数を数えること等、条件式を使って細かく要素数を数えることができます!
is_a?関数については、以下の記事で紹介していますので、ご参考ください!
is_a関数

まとめ

今回は配列の要素数を数える方法を3つ紹介しました。

・size:配列の要素の総数を出力(文字列の文字数も出力可)※
・length:配列の要素の総数を出力(文字列の文字数も出力可)※
・count:配列の特定の要素数を出力
※sizeとlengthは同様の使い方ができます。

sizeとlengthは、単純に要素数を数える方法として、非常に使いやすいですね。
また、その名前から意味が分かりやすく、コードを読みやすくしてくれるので、とても重宝しますね。

countは、引数を指定するとそれに一致する要素をカウントしてくれる便利な方法ですね。
「このデータの数を知りたい!」と思った時に、サッとシンプルに使える良い方法です。
引数を指定しなければ、要素の総数を数えることもできます。

個人的には、総数を数える時にはsizeかlength、特定の要素数を数える時にはcountを使った方がコードがより読みやすくなると思います。
使い方は様々ですので、自分に合った方法を見つけてみて下さいね!