LoginSignup
7
5

More than 5 years have passed since last update.

Ruby技術者認定試験Silver 2.1 学習用の個人的なメモ その6

Last updated at Posted at 2016-04-16

メソッド掘り下げ

破壊メソッドや同じような挙動をする似たようなメソッドについては覚えておく必要あり

破壊メソッドについては!がつかないものをピックアップ

参考にさせて頂いたサイト
http://bakunyo.hatenablog.com/entry/2013/07/11/Ruby認定技術者のSilverに受かったので諸々の報告

Enumerableモジュール(Array、Hashからincludeされている)

参考(公式のリファレンスにリンク変更)
http://ref.xaio.jp/ruby/classes/enumerable
http://docs.ruby-lang.org/ja/2.1.0/class/Enumerable.html

メソッド名 意味 破壊 near
all? 全て真であるかを確認する × -
none? 全て偽であるかを確認する × -
one? 1つだけが真であるかを確認する × -
any? いずれかが真であるかを確認する × -
chunk ブロックの戻り値ごとに要素の並びをまとめた配列を作る x -
collect ブロックの戻り値で集めた配列を返す × map
collect_concat 各要素をブロックに渡し、その返り値を連結した配列を返し × flat_map
count 要素の数を返す × size, length
cycle 配列の要素の数だけブロックを繰り返し実行 ×
detect ブロックが真が返したときは繰り返しを中断してその要素を返す × find
drop 引数のn個の要素を先頭から取り除き、残りで新しい配列を作成して返す × -
drop_while ブロックの戻り値が真である要素を先頭から取り除き、残りの要素で作成した配列を返す × -
each_cons 引数nで指定した数の要素を繰り返し取り出して、順次ブロックを実行 × each_slice
each_slice 引数nで指定した数の要素を繰り返し切り出して、ブロックを実行 × each_cons
each_entry ブロックを各要素に一度ずつ適用 × -
each_witch_index 要素の数だけブロックを繰り返し実行 ×
each_with_object 要素を使ってオブジェクトを操作する事が可能 × inject,reduce
entries レシーバの各要素を集めて配列にして返す  × to_a
find ブロックが真を返したときは繰り返しを中断してその要素を返す × detect
find_all ブロックの条件で真となった戻り値を集め配列を返す(中断しない) × select
find_index 要素の中から引数objと同じものを探し、その位置を整数で返します ×
first 最初の要素を取得する ×
grep その結果が真だった要素を集めて配列にして返し ×
group_by ブロックの戻り値が同じ要素をそれぞれ集めます ×
partition ブロックの戻り値(真偽)で要素を2つの配列に分ける ×
reduce ブロックを使って繰り返し計算を行う × inject
reject 条件に合わない要素を探して集める ×
select ブロックの条件で真となった戻り値を集め配列を返す(中断しない) × find_all
sort_by ブロックの戻り値を集めて小さい順に並べる ×
take dropの逆firstの個数指定 ×
zip レシーバと引数のオブジェクトの要素を組み合わせ、配列の配列を生成 ×

String

参考
http://ref.xaio.jp/ruby/classes/string
http://docs.ruby-lang.org/ja/2.1.0/class/String.html

メソッド名 意味 破壊 near
<< 文字列の追加 concat
concat 文字列の追加 <<
[]= []内で指定した部分文字列を右辺の文字列で置き換え -
replace 文字列を変更する -
insert 指定の位置に文字列を挿入 -

※stringにはupdateというメソッドはない!

Array

参考
http://ref.xaio.jp/ruby/classes/array
http://docs.ruby-lang.org/ja/2.1.0/class/Array.html

メソッド名 意味 破壊 near
<< 末尾に要素を追加 push
concat 末尾に配列を結合 -
[]= 指定の位置や範囲の要素を置換 -
replace 配列の内容を引数other_arrayのもので置き換え -
insert 指定した位置に要素を挿入 -
shift 先頭の要素を取り除いて返す first
unshift 先頭に要素を追加 -
pop 末尾の要素を取り除いて返す last
push 末尾に要素を追加 <<
fill 指定した値で配列を満たす -
delete_at 指定した位置の要素を削除 slice!
delete_if ブロックが真を返す要素を削除。条件に一致したら消える reject!
keep_if ブロックが偽を返す要素を削除。条件に一致したもののみ残す select!
delete 要素を削除 -
clear 要素を全て削除 -
assoc キーを元に配列の配列から配列を取り出す × -
rassoc キーの値を元に配列の配列から配列を取り出す × -
at 指定の位置の要素を取り出す × [], fetch
choice/sample 配列の要素を1つランダムに返す × -
select ブロックの条件で真となった戻り値を集め配列を返す × find_all
combination 配列から引数n個の要素を選んだときの組合せを返す ×
compact 要素からnilを削除する ×

Hash

参考
http://docs.ruby-lang.org/ja/2.1.0/class/Hash.html

メソッド名 意味 破壊 near
[]= 指定の位置や範囲の要素を置換 -
delete_if ブロックが偽を返す要素を削除 reject!
delete 要素を削除 -
replace 配列の内容を引数other_arrayのもので置き換え -
shift 先頭の要素を取り除いて返す first
clear 要素を全て削除 -
update 指定した要素で統合 merge!

模擬試験

番号 解答 正解 番号 解答 正解 番号 解答 正解
1 C,D 11 A 21 A
2 B 12 A,C 22 A B
3 D 13 B 23 A
4 B 14 B A 24 D B
5 A,B,E 15 B 25 ? D
6 B 16 C 26 A C
7 C 17 D 27 B,C C,D
8 B,C 18 A,C 28 D
9 B D 19 B 29 A
10 A,C 20 C D 30 A C
9.rb
puts "Ruby on Rails".delete("Rails")
uby on 
14.rb
str = "RubyAssociation\r\n"
p str
p str.chop

"RubyAssociation\r\n"
"RubyAssociation"
20.rb
p File.join("ruby", "exam","silver")

"ruby/exam/silver"
22.rb
#ケアレスミス
string = "test code"
string.slice(0,4)
p string #引っ掛け 破壊的ではないので

"test code"
24.rb
#Hash系
cc = {"nz"=>"New Zealand", "ru"=>"Russia", "ar"=>"Argentina"}
p cc.has_key?('nz')
p cc.key?('nz')
p cc.include?('nz')
p cc.member?('nz')
p cc.value?("New Zealand") # 値が含まれるか?
p cc.has_value?("New Zealand") # 値が含まれるか?
p cc.contain?('nz') # 存在しないメソッド

true
true
true
true
true
true
hairetu.rb:163:in `<main>': undefined method `contain?' for {"nz"=>"New Zealand", "ru"=>"Russia", "ar"=>"Argentina"}:Hash (NoMethodError)
25.rb
#模擬問題のPDF印字不備
p "Hello there".class
p String.superclass
class Foo; end
class Bar < Foo; end
p Foo.superclass
p Bar.superclass

String
Object
Object
Foo
26.rb
#正規表現
s = "To be or not to be, that is the question."
hash = Hash.new(0)
p s.scan(/\w+/)
s.scan(/\w+/) { |i| hash[i] += 1}
p hash["be"] #=>2
p "-----------------------------"
s = "To be or not to be, that is the question."
hash = Hash.new(0)
p s.match(/\w+/)
s.match(/\w+/) { |i| hash[i] += 1}
p hash["be"] #=>2

["To", "be", "or", "not", "to", "be", "that", "is", "the", "question"]
2
"-----------------------------"
#<MatchData "To">
0
27.rb
#組み込みライブラリ、Integer#chr(encoding)についての説明として正しいものはど
#れか、2つ選択してください。
C.引数で与えられたencodingにおいて、selfを文字コードと見なし、それに対応する一文字か らなる文字列を返す。
D.指定されたエンコーディングでselfを正しく解釈できない場合はエラーが発生する。
30.rb
p 6/2*2
p 6/2**2
p (3*2)**2
p 3*2**2   # 括弧がない場合**が優先される
p "foo" * 2 **2 # "foo" * 4 の意味

6
1
36
12
"foofoofoofoo"
7
5
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
7
5