requires=
classes=Set,SortedSet
methods=Enumerable/i.to_set.set
sublibraries=
is_sublibrary=false
category=Math

集合を表す Set クラスと、取り出し順序を保証した SortedSet クラスを提供
します。

集合とは重複のないオブジェクトの集まりです。
[[c:Array]] の持つ演算機能と [[c:Hash]] の高速な検索機能を合わせ持ちます。

Set および SortedSet は内部記憶として [[c:Hash]] を使うため、集合要素の
等価性は [[m:Object#eql?]] と [[m:Object#hash]] を用いて判断されます。
したがって、集合の各要素には、これらのメソッドが適切に定義されている
必要があります。

Set クラスでは、集合要素を取り出す際の順序は保証されません。
一方、SortedSet では、集合要素はソートされた順序で取り出されます。

また、set ライブラリを require すると [[c:Enumerable]] モジュールが
拡張され、[[m:Enumerable#to_set]] の形で集合オブジェクトを生成できる
ようになります。

=== 注意事項

Ruby 1.9 以降では、集合オブジェクトに対する taint, untaint, freeze の各
メソッドの効果は、内部記憶として保持するハッシュにも適用されます。

集合オブジェクトおよびその内部記憶にセットされた taint 情報は、
dupおよび clone メソッドによって複製された集合オブジェクトにもコピー
されます。

ただし、freeze された集合を clone した場合、複製された集合の内部記憶
には freeze 情報が引き継がれません。
したがって、生成された集合に対する要素の変更はエラーになりません。


=== 例
  require 'set'
  
  set1 = Set.new ["foo", "bar", "baz", "foo"]

  p set1                  #=> #<Set: {"baz", "foo", "bar"}>
  p set1.include?("bar")  #=> true
  
  set1.add("heh")
  set1.delete("foo")
  p set1                  #=> #<Set: {"heh", "baz", "bar"}>
