0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

rubyで配列に使うメソッド21個

0
Last updated at Posted at 2023-04-21

今週はコードを色々と書いていました。
実際に業務で使ったり調べたりしたコードをまとめてみました。

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は使ったことがないのでおいおい試しに使ってみたいと思います。

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?