Ruby技術者認定試験のサンプル問題を解いていく ~silver編~③
githubにあるRuby技術者認定試験のサンプル問題を解説していこうと思います!
問題はこちらにありますので是非解いてみてくださいね!
解説はRuby 2.7.0 リファレンスマニュアルに準拠しています。
第三問
問題3. 以下のコードを実行した出力として正しいものを1つ選択してください。
puts({"members" => 193, "year" => 2014}.size)
- A.15
- B.6
- C.4
- D.2
正解はDですね。
ハッシュクラスのsizeメソッドは指定されたハッシュの要素数を返します。
書籍でRubyを勉強してみましょう!
lengthとsize
この問題で使用されているsizeメソッドは他のクラスのメソッドにも存在します。
同じような機能を持つメソッドにlengthメソッドがあります。
ここでは、使用頻度の高いハッシュ、配列、文字列、数値のクラスで使用できるlengthメソッド、sizeメソッドについて見ていきます。
ハッシュ
length、sizeともにハッシュ内の要素数を返します。
配列
length、sizeともに配列内の要素数を返します。
文字列
length、sizeともに文字列の長さを返します。
数値
複素数、有理数のクラスにはlength、sizeメソッドが存在しません。
整数値のクラスでは、sizeメソッドで、実装上のサイズをバイト数で返します。
lengthメソッドは存在しません。
数字の桁数を取得するには以下の二つの方法があります。
# digitsメソッドで生成された配列の長さを取得する
puts 123456.digits
puts 123456.digits.length
#=> [6,5,4,3,2,1]
#=> 6
# 一度文字列に変換してから長さを取得する
puts 123456.to_s
puts 123456.to_s.length
puts 123456.to_s.size
#=> 123456
#=> 6
#=> 6
digitsメソッドは数値を位取り記数法で表記した数値を配列で返します。
digits(N)を指定するとN進数に変換し、位取り記数法で表記したものを返します。
Nを指定しない場合は10進数のまま処理を行います。
to_sメソッドは数値をそのまま文字列として扱える形式に変換します。
各オブジェクトクラスのlength、size
各オブジェクトクラスのlength、sizeメソッドの扱いについて表にしてみました。
length | size | |
Hash(ハッシュ、連想配列) | 要素数 | 要素数 |
Array(配列) | 要素数 | 要素数 |
String(文字列) | 文字数 | 文字数 |
Integer(整数) | なし | バイト数 |
その他Numericのサブクラス(数値) | なし | なし |