LoginSignup
4
0

【Ruby Gold3.1詰まったシリーズ】tallyメソッド確認してみた

Last updated at Posted at 2023-12-11

はじめに

今回はtallyに関する内容です。Ruby3.1の新しい概念の一つにtallyメソッドがあるので簡単にまとめてみます。

確認してみた

環境はruby 3.1.4です。
こちらによると、tallyメソッドは要素ごとの個数を返すメソッドらしいです。
実際に配列に対してtallyメソッドを実行

fruits = ["banana", "pineapple", "grape", "apple", "grape", "pineapple"]
fruits.tally 

すると、

irb(main):001> fruits = ["banana", "pineapple", "grape", "apple", "grape", "pineapple"]
irb(main):002> fruits.tally 
=> {"banana"=>1, "pineapple"=>2, "grape"=>2, "apple"=>1}

banana/pineapple/grape/appleの個数が返っている。
tallyメソッドを使用しないパターンで同じ結果を返す方法をchatgptに聞いてみると、

fruits = ["banana", "pineapple", "grape", "apple", "grape", "pineapple"]

tally = fruits.each_with_object(Hash.new(0)) do |fruit, counts|
  counts[fruit] += 1
end

puts tally

が返ってきて、実際に試すと、

irb(main):003* tally = fruits.each_with_object(Hash.new(0)) do |fruit, counts|
irb(main):004*   counts[fruit] += 1
irb(main):005> end
=> {"banana"=>1, "pineapple"=>2, "grape"=>2, "apple"=>1}
irb(main):006> 
irb(main):007> puts tally
{"banana"=>1, "pineapple"=>2, "grape"=>2, "apple"=>1}

tallyメソッドを使用した結果と同じ結果となりました。

おわりに

確認した結果、tallyメソッドは要素ごとの個数を返すことが分かりました。また、tallyメソッド以外の方法でtallyメソッドと同じ結果を出す方法も確認した結果、ブロック操作する必要がでてきたので、tallyメソッドを利用した方が簡単に要素ごとの個数を返すことができると感じました。もし誤っていたらご指摘いただけると助かります!

参考

4
0
1

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