Help us understand the problem. What is going on with this article?

count, length, sizeメソッドの違いと特徴を比較

More than 3 years have passed since last update.

配列の要素数を返り値にもつメソッドは幾つかありますが、違いってなんでしょうか?使い分けはどのようにしたらいいのでしょうか?

countメソッド

構文1

array.count(obj)

解説

引数objと同じ要素の数を返します。引数を省略した場合は単に、配列の要素数を返します。

sample.rb
ary = [2, 4, 5, 9, 2, 2, 4, 1]
# 配列内の整数 2 の数を表示
ary.count(2)
=> 3
# 配列内の整数 3 の数を表示
ary.count(3)
=> 0
# 配列内の要素数を表示
ary.count
=> 8

構文2

array.count do |変数|
  処理
end

解説

  1. 配列内の要素を一つ取り出す
  2. | |内の変数に代入する
  3. 処理を行う
  4. 手順2と3を配列の要素がなくなるまで繰り返す
  5. 手順3で行った処理の返り値が真になった回数を最終的に返す

sample.rb
ary = [1,2,3,4,5]
ary.count do |num|
  num % 2 == 0 # 各要素が2で割り切れたら、つまり偶数なら「真」を返す
end
=> 2 # 偶数の数を返す

lengthメソッド, sizeメソッド

構文

array.length
array.size

解説

これらのメソッドは単に配列の要素数を返す

sample.rb
ary = [2,3,"takashi", {title: "ときかけ", genre: "青春"}, [3,4,5]]
ary.length
=> 5 # 配列aryの要素数
ary.size
=> 5 # 配列aryの要素数

ハッシュにcountメソッド, sizeメソッド, lengthメソッドを使う

sample.rb
hash = {title: "ときかけ", genre: "青春"}
hash.count
=> 2
hash.size
=> 2
hash.length
=> 2

解説

これらのメソッドはハッシュにも使用することができる。
使用するハッシュの中のキーとバリューのセットの数を返す。

まとめ

項目 count size length
配列/ハッシュ
引数もつ × ×
引数ない 要素数を返す 要素数を返す 要素数を返す
引数あり 引数と一致する要素の数える × ×
ブロックもつ × ×
ブロックあり ブロック内の処理の返り値が真のものを数える × ×
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away