メソッド
size(要素数を返す)
code:rb
# 配列
1, 2, 3.size #=> 3
# ハッシュ
{:key1 => 1, :key2 => 2}.size #=> 2
select!・find_all(一致した要素の配列を作成する)
code:rb
array = 1,2,3,4,5
p array.select { |num| num > 3 }
#=> 4, 5
compact(nilを取り除いた配列を返す) 非破壊
code:rb
array = 1, 2, nil, 3, nil, 4
p array.compact
#=> 1, 2, 3, 4
collect / map(ブロックの戻り値を集めた要素で配列を作る)
code:rb
1,1,1,2,3,4.map{|n| n*3 if n==1}
#=> 3, 3, 3, nil, nil, nil
flatten(配列を平坦化した配列を返す)
code:rb
array = [1, 2, 3, 4, 5]
p array.flatten
#=> 1, 2, 3, 4, 5
join(配列の要素を文字列に結合した配列を返す(平坦化もする)) 非破壊的
code:rb
array = ["a", "b", "c"]
p array.join
#=> "abc"
array = "a", "b", "c"
p array.joi("-")
#=> "a-b-c"
clear(配列・ハッシュの中身を空にする)破壊的
code:rb
hash = {:a => ruby, :b => java}
hash.clear
#=> {}
chop(文字列の末尾の一文字を削除する(\r\nのみ一文字として解釈(chompも同様))非破壊的
code:rb
a = "abc\n\r\n"
a.chop
#=> "abc\n"
slice非破壊的
code:rb
array = "Ruby", "Java", "Swift"
string = "Learn Ruby"
p array.slice(0, 2)
#=> "Ruby", "Java"
p array.slice(1)
#=> "Java"
p string.slice(0, 3)
#=> "Lea"
split(第1引数に文字列を何で区切るか、第2引数に何要素の配列にするか)非破壊的
code:rb
str = "a,b,c,d"
p str.split(/,/, 2)
#=> "a","b,c,d"
concat(String・Arrayを連結)破壊的
code:rb
a = 1, 2
b = 3, 4
a.concat(b)
#=> 1, 2, 3 ,4
readline (一行の読み込み)
一行の読み込みに成功すると文字列を返す
EOFに到達するとEOFError
gets(一行の読み込み)
EOFに到達するとnilを返す
readlines(全て読み込む)
一行を要素とした配列
inject(繰り返しメソッド(sumに0(自動で値はプラスされない)、valに配列の要素))
code:rb
array = 2, 4, 6, 8
array.inject (0){ |sum,val| p sum+=num}
# =>
2
6
12
20
a
find / detect (ブロックの評価の結果最初の真の値を返す)
code:rb
p 1, 2, 3, 4, 5.find {|i| i % 3 == 0 }
# => 3
p 1, 2, 3, 4, 5.find {|i| i > 6 }
# => nil
dup(オブジェクトをコピーし、新しくオブジェクトを作る(object_idは異なる))
code:rb
foo = 1,2,3
bar = foo
baz = foo.dup
bar3 = 4
p foo
p bar
p baz
# =>
1, 2, 3, 4
1, 2, 3, 4
1, 2, 3
eql? / equal? (同一か判断)
code:rb
foo = "a"
bar = foo
baz = foo.dup
bar.eql?(baz) #eql?はobjが同一か判断
bar.equal?(baz) #equal?はidが同一か判断
# =>
true
false
reject! / delete_if (真になった要素を削除し、偽の要素の配列を作成する)
code:rb
a = 1, 2, 3, 4, 5
a.reject! {|n| n % 2 == 0}
# => 1, 3, 5
delete_ifは常にselfを返す
reject!は1以上削除されればselfを、0の場合nilを返す
delete 破壊的
Hash .to_h
Hash .merge
Hash .fetch
Hash .update
product(引数の要素を各要素に付け加える)破壊的
code:rb
1,2.product(1,2)
# => 1,1],1,2,2,1,[2,2
1,2.product(3,4,5,6)
# => [1,3,5,1,3,6,1,4,5,1,4,6,
# 2,3,5,2,3,6,2,4,5,2,4,6]
each_cons(n要素ずつに区切り、出力)
code:rb
(1..10).each_cons(3){|v| p v }
# => 1, 2, 3
# 2, 3, 4
# 3, 4, 5
# 4, 5, 6
# 5, 6, 7
# 6, 7, 8
# 7, 8, 9
# 8, 9, 10
invert (ハッシュの値とキーを入れ替える(重複した場合最後の値が優先される))非破壊的
code:rb
h = { "a" => 0, "b" => 100, "c" => 200, "d" => 300, "e" => 300 }
p h.invert
#=> {0=>"a", 100=>"b", 200=>"c", 300=>"e"}
strip(文字列先頭と末尾の空白文字を削除する(空白文字:\t \r \n \f \v)
code:rb
p " abc \r\n".strip #=> "abc"
p "abc\n".strip #=> "abc"
p " abc".strip #=> "abc"
p "abc".strip #=> "abc"
p " \0 abc \0".strip # => "\000 abc" # 右側のみ "\0" も取り除く
width_index(n)(nが初期値)
step
code:rb
2.step(10, 3) do |num|
puts num
end
#=> 2
# 5
# 8
obj.step(limit, step) objにstepを足してlimitまで行く
transpose(配列を縦に見て配置し直す)
code:rb
[1, 3,
1, 4,
2, 3,
2, 4
].transpose
#=> 1, 1, 2, 2], [3, 4, 3, 4
zip 破壊的
code:rb
arr = 1,2,5.zip(3,4,3)
p arr
#=> 1, 3], 2, 4, [5, 3
String.index
code:rb
p "abc".index("b")
p "abab".index("a",1)
#=> 1
# 2
String.upcase破壊的
partition 破壊的
code:rb
a,b = (1..5).partition(&:odd?)
p a,b
# => 1, 3, 5
# 2, 4