~~Title: UnorderedSet ~~
The **UnorderedSet** object is container that stores one or more unique objects. It is similar to a StringSet except it can store variants of any type (rather than just strings), and the contents are not kept sorted (in fact, the order of set members is unspecified). Like a StringSet it uses a dictionary system to locate members rather than numeric indexes. You can therefore lookup members much more quickly than by linearly searching a **[[vector|Vector]]**.
You can create a new **UnorderedSet** using the **[[dopusfactory|DOpusFactory ]]**object.
Care should be taken when adding objects to an **UnorderedSet**. Unlike strings and numbers, the container will only consider two objects equal if both are the exact same object (i.e. same instance/reference). Two separate objects with the same value will not be considered equal, and can both exist in the same **UnorderedSet** at once.
==JScript Example:==
var us = DOpus.Create.UnorderedSet();
us.insert("cat");
us.insert("cat"); // No effect, as "cat" already inserted.
us.insert("dog");
us.insert(DOpus.FSUtil.NewPath("C:\\"));
us.insert(DOpus.FSUtil.NewPath("C:\\")); // Inserts a second C:\ Path object!
var p = DOpus.FSUtil.NewPath("D:\\");
us.insert(p);
us.insert(p); // No effect, as p already inserted.
DOpus.Output("count: " + us.count);
for (var e = new Enumerator(us); !e.atEnd(); e.moveNext())
{
DOpus.Output("Item: " + e.item());
}
That will output the following (order of items may vary):
count: 5
Item: cat
Item: dog
Item: D:\
Item: C:\
Item: C:\
$$ Property Name
$$ Return Type
$$ Description
$$ count
$$ //int//
$$ Returns the number of elements the **UnorderedSet** currently holds.
$$ empty
$$ //bool//
$$ Returns **True** if the **UnorderedSet** is empty, **False** if not.
$$ length
$$ //int//
$$ A synonym for **count**.
$$ size
$$ //int//
$$ A synonym for **count**.
$$ Method Name
$$ **Arguments**
$$ Return Type
$$ Description
$$ assign
$$ <**UnorderedSet**:from>\\
$$ //none//
$$ Copies the contents of another **UnorderedSet** to this one. You can also pass an array or **[[vector|Vector]]** object.
$$ clear
$$ //none//
$$ //none//
$$ Clears the contents of the **UnorderedSet**.
$$ erase
$$ //variant//
$$ //none//
$$ Erases the element if it exists in the set.
$$ exists
$$ //variant//
$$ //bool//
$$ Returns **True** if the specified element exists in the set.
$$ insert
$$ //variant//
$$ //bool//
$$ Inserts the element into the set if it doesn't already exist. Returns **True** if successful.
$$ merge
$$ <**UnorderedSet**:from>
$$ //none//
$$ Merges the contents of another **UnorderedSet** with this one.