July 13, 2020
a = [1, nil, 'abc', false]
b = a.compact
b #=> [1, 'abc', false]
配列の要素数が0 の場合に true
[1, 2, 3].empty? #=> false
[].empty? #=> true
a = [[1, 2], [3, 4], [5, 6]]
a.flatten #=> [1, 2, 3, 4, 5, 6]
mapを使うと配列の配列(ネスト)した状態で返ってくる
sentences = ['Ruby is fan', 'I love Ruby']
sentences.map { |s| s.split(' ') }
#=> [["Ruby", "is", "fan"], ["I", "love", "Ruby"]]
ネストされていないフラットな配列が返ってくる
sentences = ['Ruby is fan', 'I love Ruby']
sentences.flat_map { |s| s.split(' ') } #=> ["Ruby", "is", "fan", "I", "love", "Ruby"]
引数と一致する要素が最初に見つかったときに添え字を返す
a = [10, 20, 30, 10, 20, 30]
a.index(30) #=> 2
ブロックを使うと戻り地が最初に真になった要素の添字が返ってくる
a = [10, 20, 30, 10, 20, 30]
a.index { |n| n >= 20 } #=> 1
引数と等しい要素が配列に含まれる場合に true
a = [10, 20, 30]
a.include?(20) #=> true
a.include?(50) #=> false
配列の各要素を1つに連結した文字列を返す
words = ['apple', 'melon', 'orange']
words.join #=> "applemelonorange"
引数に文字列を渡すとその文字列が挟み込まれる
words = ['apple', 'melon', 'orange']
words.join(', ') #=> "apple, melon, orange"
配列内のmin
は最小のmax
は最大の要素を取得
a = [3, 6, 2, 1, 5, 4]
a.min #=> 1
a.max #=> 6
minmax
は最小の要素と最大の要素を配列に入れて取得
a = [3, 6, 2, 1, 5, 4]
a.minmax #=> [1, 6]
reverse
メソッドは配列を逆順に並び替えす
a = [1, 2, 3, 4]
a.reverse #=> [4, 3, 2, 1]
reverse_each
メソッドは逆順に繰り返し処理を行うメソッド
a = [1, 2, 3, 4]
a.reverse_each.map { |n| n * 10 } #=> [40, 30, 20, 10]
shuffle
メソッドは配列の要素をランダムに並び替えるメソッド
a = [1, 2, 3, 4, 5 ,6]
a.shuffle #=> [2, 4, 5, 6, 3, 1]
sample
メソッドは配列からランダムに1つの要素を取り出します。引数を渡すと、その個数だけランダムに取り出した要素(ただし重複したインデックスは選択しない)を返します。
a = [1, 2, 3, 4, 5 ,6]
a.sample #=> 2
a.sample(3) #=> [3, 5, 4]
sort
メソッドは配列の要素を順番に並び替えた新しい配列を返します。
a = [5, 2, 6, 3, 1, 4]
a.sort #=> [1, 2, 3, 4, 5, 6]
配列の中身の合計値を求める
[1, 2, 3, 4].sum
#=> 10
デフォルトの初期値は0ですが、引数で変更できます。
[].sum
#=> 0
[1, 2, 3, 4].sum(5)
#=> 15
文字列の配列を連結する場合は初期値に何らかの文字列を渡します。
['foo', 'bar'].sum('')
#=> 'foobar'
['foo', 'bar'].sum('>>')
#=> '>>foobar'
配列の配列を連結することも可能
[[1, 2], [3, 1, 5]].sum([])
#=> [1, 2, 3, 1, 5]
a = [1, 1, 2, 2, 3, 4]
a.uniq #=> [1, 2, 3, 4]
配列の配列を行列として見立て、行と列を入れ替えた配列を返す
a = [[10, 20], [30, 40], [50, 60]]
a.transpose #=> [[10, 30, 50], [20, 40, 60]]
# テストに回答した生徒の名前
names = ['Alice', 'Bob', 'Carol']
# 各生徒の点数
points = [80, 90, 60]
# 名前と点数を組み合わせる
names.zip(points) #=> [["Alice", 80], ["Bob", 90], ["Carol", 60]]
ここからさらにto_h
メソッドを使うとハッシュに変換でき、生徒の名前で点数を取得することができます
point_table = names.zip(points).to_h #=> {"Alice"=>80, "Bob"=>90, "Carol"=>60}
point_table['Alice'] #=> 80
point_table['Carol'] #=> 60
zip
メソッドの引数は可変長引数になっているので、2つ以上の配列を渡すこともできます。
lengths = [1, 2, 3]
widths = [10, 20, 30]
heights = [100, 200, 300]
lengths.zip(widths, heights) #=> [[1, 10, 100], [2, 20, 200], [3, 30, 300]]