今週はコードを色々と書いていました。
実際に業務で使ったり調べたりしたコードをまとめてみました。
1. sort_by
配列の要素を特定の条件に基づいて並べ替えるためのメソッド
引数には、ブロックを渡します。ブロック内で定義された条件に従って、各要素が評価され、その結果をもとに要素がソートされます。返り値は、条件に基づいてソートされた新しい配列です。
例えば、以下のような配列があるとします。
fruits = ["apple", "banana", "orange", "grape"]
この配列を、文字列の長さに基づいてソートするには、以下のようにsort_byメソッドを使用できます。
sorted_fruits = fruits.sort_by { |fruit| fruit.length }
puts sorted_fruits #=> ["apple", "grape", "banana", "orange"]
このように、ブロックの評価結果が小さい順に並び替えられた新しい配列が返されます。
2. index
配列(あるいは文字列)の中から引数に指定した要素のインデックスを取得するメソッド
例えば、以下のように配列fruitsの中から"apple"のインデックスを取得することができます。
fruits = ["orange", "banana", "apple", "grape"]
apple_index = fruits.index("apple")
puts apple_index #=> 2
indexメソッドは、引数に渡した要素が配列内に複数ある場合は、最初に見つかった要素のインデックスを返します。見つからなかった場合は、nilを返します。
3. map
配列の各要素に対してブロックを評価し、その結果を新しい配列にして返すメソッド
fruits = ["apple", "banana", "orange"]
upcase_fruits = fruits.map { |fruit| fruit.upcase }
puts upcase_fruits #=> ["APPLE", "BANANA", "ORANGE"]
4. max
配列の最大値を返すメソッド
numbers = [1, 2, 3, 4, 5]
puts numbers.max #=> 5
5. min
配列の最小値を返すメソッド
numbers = [1, 2, 3, 4, 5]
puts numbers.min #=> 1
ただ、使っていて気づいたのですがmaxやminは配列の中から1つしか取り出せないんですよね...
なので、2つ以上を取り出したい場合は次のselectで取り出してやる必要があります。
6. select
配列の各要素に対してブロックを評価し、ブロックの戻り値が true となる要素を新しい配列にして返すメソッド
numbers = [1, 2, 3, 4, 5]
even_numbers = numbers.select { |number| number.even? }
puts even_numbers #=> [2, 4]
7. each
配列の各要素に対してブロックを評価します。戻り値は元の配列です。
fruits = ["apple", "banana", "orange"]
fruits.each { |fruit| puts fruit }
#=> apple
# banana
# orange
8. inject
初期値とブロックを受け取り、配列の各要素に対してブロックを評価します。ブロックの戻り値は次の要素と結合され、最後に結果を返します。
numbers = [1, 2, 3, 4, 5]
sum = numbers.inject(0) { |result, number| result + number }
puts sum #=> 15
9. include?
配列に引数で指定した要素が含まれるかどうかを判定するメソッド
fruits = ["apple", "banana", "orange"]
puts fruits.include?("apple") #=> true
puts fruits.include?("grape") #=> false
10. uniq
配列から重複する要素を取り除いた新しい配列を返すメソッド
fruits = ["apple", "banana", "orange", "apple", "banana"]
unique_fruits = fruits.uniq
puts unique_fruits #=> ["apple", "banana", "orange"]
11. join
配列の要素を指定した文字列で結合した新しい文字列を返すメソッド
fruits = ["apple", "banana", "orange"]
joined_fruits
12. count
引数で指定した要素の数をカウントするメソッド
これはsizeとlengthの使い分けが必要なので、その点は注意が必要。
numbers = [1, 2, 3, 2, 1]
puts numbers.count(1) #=> 2
13. reverse
配列の要素を逆順にした新しい配列を返すメソッド
fruits = ["apple", "banana", "orange"]
reverse_fruits = fruits.reverse
puts reverse_fruits #=> ["orange", "banana", "apple"]
14. empty?
配列が空かどうかを判定するメソッド
fruits = []
puts fruits.empty? #=> true
14. slice
配列の要素の一部分を切り出した新しい配列を返すメソッド
fruits = ["apple", "banana", "orange"]
slice_fruits = fruits.slice(1, 2)
puts slice_fruits #=> ["banana", "orange"]
15. all?
引数で指定した条件が配列の全ての要素に対して true を返すかどうかを判定するメソッド
numbers = [1, 2, 3, 4, 5]
result = numbers.all? { |number| number > 0 }
puts result #=> true
numbers = [1, 2, 3, 4, -5]
result = numbers.all? { |number| number > 0 }
puts result #=> false
16. any?
引数で指定した条件を満たす要素が配列の中にひとつ以上あるかどうかを判定するメソッド
numbers = [1, 2, 3, 4, 5]
result = numbers.any? { |number| number > 4 }
puts result #=> true
numbers = [1, 2, 3, 4, -5]
result = numbers.any? { |number| number < 0 }
puts result #=> true
17. shuffle
配列の要素をランダムに並び替えた新しい配列を返すメソッド
numbers = [1, 2, 3, 4, 5]
shuffled_numbers = numbers.shuffle
puts shuffled_numbers #=> [3, 1, 4, 5, 2]
18. reduce (または inject)
配列の各要素を順番に取り出し、指定された演算子を適用して一つの値にまとめるメソッド
最初の引数には初期値を指定することができます。
numbers = [1, 2, 3, 4, 5]
sum = numbers.reduce(0) { |acc, number| acc + number }
puts sum #=> 15
19. compact
配列から nil を除いた新しい配列を返すメソッド
values = [1, nil, 2, nil, 3]
puts values.compact #=> [1, 2, 3]
20. flatten
配列を平坦化した新しい配列を返すメソッド
多次元配列を一次元配列にすることができます。
numbers = [1, [2, 3], [4, [5, 6]]]
puts numbers.flatten #=> [1, 2, 3, 4, 5, 6]
21. partition
引数で指定した条件を満たす要素と満たさない要素を分割した二つの配列を返すメソッド
numbers = [1, 2, 3, 4, 5]
even, odd = numbers.partition { |number| number.even? }
puts even #=> [2, 4]
puts odd #=> [1, 3, 5]
以上、今週使ったり、調べたりしたメソッドでした。19〜21は使ったことがないのでおいおい試しに使ってみたいと思います。