105
81

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

length、size、count メソッドの違いまとめ【Ruby】

Last updated at Posted at 2019-04-20

####Rubyの length、size、count メソッドの違いいつも忘れるので、備忘録としてささっとアウトプット。
Rubyバージョンは 2.6.2

#まず、結論

##配列の場合
####・要素数カウントしたい → length か size がベターだが countも使える
####・特定の要素 の数をカウントしたい → count
##ハッシュの場合
####・{key: value}のセット数を確認したい → length か size がベターだが countも使える
####・特定の {key: value} のセット数を確認したい → count
##文字列の場合
####・文字数カウントしたい → length か size
####・特定の文字 の数をカウントしたい → count

#ここから解説
##length / size
length と size は同じエイリアス
機能としては下記のように配列の要素数、ハッシュの{key: value}のセット数、文字列の文字数を数値で返す。
全要素数、全{key: value}セット数、文字数を返す。それたけ。

配列 ハッシュ 文字列
戻り値 配列の要素数 {key: value}の数 文字数

使用例


#配列
[1, 2, 3].size #=> 3

#ハッシュ
{name: "Taro", age: 20, occupation: "Student"}.length #=> 3

#文字列
"aiueo".size #=> 5

シンプル! length と size は以上!

##count
count の機能としては、length / size と同じように配列の要素数、ハッシュの{key: value}のセット数返す。

length と size との違いは count は引数を取れるということ。

#####文字通り、引数と同じ配列の要素、引数と同じ文字列の数をカウントする。
#####つまり count は(処理速度という観点を除けば) length / size の ほぼ上位互換的な存在
引数には普通に文字列数値、そしてブロックも取れる。

####※だた注意点
#####文字列の場合、シンプルに全文字数カウントはできない。(引数が必須)
この注意点を踏まえて下記の使用例。
使用例

# 配列(引数あり)
[1, 2, 3].count(3) #=> 1

# 配列(引数なし)
[1, 2, 3].count #=> 3

# ハッシュ(引数あり)
{name: "Taro", age: 20, occupation: "Student"}.count([:name, "Taro"]) #=> 1

# ハッシュ(引数なし)
{name: "Taro", age: 20, occupation: "Student"}.count #=> 3

# 文字列(引数あり)
"aiueo".count("a") #=> 1

# 文字列(引数なし) ※既述のように引数なしでは使えず、引数が必要とエラーが出ます。size or lengthを使いましょう。
"aiueo".count
ArgumentError: wrong number of arguments (given 0, expected 1+)
from (pry):7:in `count

続いて、上述した引数がブロックの時の使い方


#数値の配列から奇数をカウント
[1, 2, 3, 4, 5, 6, 7, 8, 9].count { |item| item.even? == true} #=> 4

#数値の配列から偶数をカウント
[1, 2, 3, 4, 5, 6, 7, 8, 9].count { |item| item.odd? == true} #=> 5

表にするとこんな感じ

メソッド 配列(全部) ハッシュ(全部) 文字列(全部) 配列(引数指定) ハッシュ(引数指定) 文字列(引数指定) 引数にブロック使用
size/length × × × ×
count ×

##※length / size と count の処理速度については @scivola さんからわかりやすいコメントをいただいたのでそちら参照いただけると幸いです。

#まとめ

全カウントの場合は処理速度が早い length / size を使い、

####特定の文字数や要素をカウントしたい時のみ count を使う!!

105
81
2

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
105
81

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?