Ruby 配列,ブロック,範囲
配列
配列の宣言
a = [1,2,3] a, b = [1,2] c, d = [10] #dはnilになる
要素に追加
a[1] = 20
末尾に追加
a << 10
要素の削除
a.delete_at(3)
引数で指定した文字を削除
a.delete(2)
ブロック
Rubyでは一般的に使われるfor文ではなくeachメソッドが使われる
number = [1,2,3,4] sum = 0 number.each do |n| sum += n end # sum=10
条件を指定して値を削除
a = [1,2,3,1,2,3] # 戻り値が真になったら削除する a.delete_if do |n| # odd?で奇数判定している n.odd? end # a = [2,2]
do...endではなく{}で囲める
numbers.each {|n| sum += n }
map
mapではブロックの戻り値で配列が作れる。空の配列を宣言して末尾に追加するなどの代わりに短くかける
numbers = [1,2,3,4,5] new_numbers = numbers.map {|n| n*2 } #new_numbers = [2,4,6,8,10]
select
戻り値が真の値だけで配列を作る
numbers = [1,2,3,4,5,6] event_numbers = numbers.select {|n| n.even? } # event_numbers = [2,4,6]
reject
戻り値が偽の値だけで配列を作る
numbers = [1,2,3,4,5,6] non_multiples_of_three = numbers.reject {|n| n%3==0} # event_numbers = [1,2,4,5]
find
戻り値が真になった最初の要素を返す
numbers = [1,2,3,4,5,6] event_number = numbers.find { |n| n.even?} # event_numbers = 2
inject
繰り返し計算する
numbers = [1,2,3,4] # ループ処理1回目はinjectの引数0がresultに入り、numbersの1がnに入りresult + nの結果1がresultに入る # ループ処理2回目はresultが上記の結果1、nが2 # その繰り返し sum = numbers.inject(0) {|result, n| result + n} # sum = 10
範囲オブジェクト
値の範囲を表す範囲オブジェクト
range = 1..10(1<=10) range2 = 1...10(1<10)
文字列の範囲を取り出す
a = 'abcdefg' a[1..3] # bcd
配列の範囲を取り出す
a = [1,2,3,4,5] a[1..3] #2,3,4
配列に直す
a = (1..10).to_a # 以下のような書き方もある a [*1..10]
参考
https://www.amazon.co.jp/exec/obidos/ASIN/4774193976/junic05-22/