Setクラスの使い所があまり理解できませんでしたが、少し掴めた気がしたので使いどころと使い方について簡単にまとめておきます。
Setクラス
Rubyの要素の集合を表したい場合、Setクラス
を使用することができます。
集合は重複のないオブジェクトの集まりを指します。要素の間に順序関係はありません。
使い方
setクラス
は標準ライブラリのため、requireすることで使用することができます。
以下のように定義して使います。
require 'set'
set1 = Set.new(["Alice", "Bob", "Nick"]) # =>()は省略可能
p set1 #=> <Set: {"Alice", "Bob", "Nick"}>
Set.new()
に配列を渡してSetオブジェクトを定義できます。
set2 = ["Jone", "Rian", "Tom"].to_set
p set2 #=> <Set: {"Jone", "Rian", "Tom"}>
to_set
メソッドを使用すると、配列からSetオブジェクトを生成することができます。
p Set["Yamada", "Ito"]
#=> <Set: {"Yamada", "Ito"}>
p Set[40, 10, 10, 20, 30]
#=> <Set: {40, 10, 20, 30}>
Set[]
に直接オブジェクトを定義することで、Setオブジェクトを生成することもできます。この時同じ要素はまとめられていることが確認できます。
使いどころ
Setクラス
を使用して集合を生成できることがわかりました。
では、これが何の役に立つのか、です。
Setクラスは、要素数が多い場合で早い処理が必要とされる場面で活躍します。
例えばSetオブジェクトの中身に、任意のオブジェクトが存在しているかを確かめるinclude?メソッド
を使用したい場合、できるだけ早く見つけ出したい、、、こんな時に使います。
また、Arrayにも集合機能がありincludeメソッド
が存在します。
同じように要素検索を行うことができますが、処理速度で考えるとSetクラス
の方が効率よく処理することができるようです。
これについては@an_sonyさんの記事がとても参考になったので引用させていただきます。
https://qiita.com/an_sony/items/708c47d073ad709431d6
参考
- Effective Ruby
- 【Ruby on Rails】Set#include?がなぜ速いのかを理解する