> For the complete documentation index, see [llms.txt](https://chaoses-ib.gitbook.io/directory-opus/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://chaoses-ib.gitbook.io/directory-opus/guan-fang-shou-ce/readme.zh-10/readme.zh-3/readme.zh/unorderedset.zh.md).

# UnorderedSet

**UnorderedSet** 对象是一个存储一个或多个唯一对象的容器。它类似于 **StringSet**，不同之处在于它可以存储任何类型的变体（而不仅仅是字符串），并且内容不保持排序（实际上，集合成员的顺序是未指定的）。与 **StringSet** 一样，它使用字典系统来定位成员，而不是使用数字索引。因此，您可以比线性搜索 [**Vector**](/directory-opus/guan-fang-shou-ce/readme.zh-10/readme.zh-3/readme.zh/vector.zh.md) 更快地查找成员。

您可以使用 [**DOpusFactory**](/directory-opus/guan-fang-shou-ce/readme.zh-10/readme.zh-3/readme.zh/dopusfactory.zh.md) 对象创建新的 **UnorderedSet**。

在向 **UnorderedSet** 添加对象时应谨慎。与字符串和数字不同，容器仅在两个对象都是完全相同的对象（即相同的实例/引用）时才认为它们相等。两个具有相同值的独立对象不会被视为相等，并且可以同时存在于同一个 **UnorderedSet** 中。

### JScript 示例：

```
var us = DOpus.Create.UnorderedSet();

us.insert("cat");
us.insert("cat"); // 无效，因为“cat”已插入。
us.insert("dog");
us.insert(DOpus.FSUtil.NewPath("C:\\"));
us.insert(DOpus.FSUtil.NewPath("C:\\")); // 插入第二个 C:\ Path 对象！

var p = DOpus.FSUtil.NewPath("D:\\");
us.insert(p);
us.insert(p); // 无效，因为 p 已插入。

DOpus.Output("count: " + us.count);

for (var e = new Enumerator(us); !e.atEnd(); e.moveNext())
{
DOpus.Output("Item: " + e.item());
}
```

这将输出以下内容（项目的顺序可能会有所不同）：

```
count: 5
Item: cat
Item: dog
Item: D:\
Item: C:\
Item: C:\
```

| 属性名称   | 返回值类型  | 描述                                                  |
| ------ | ------ | --------------------------------------------------- |
| count  | *int*  | 返回 **UnorderedSet** 当前持有的元素数量。                      |
| empty  | *bool* | 如果 **UnorderedSet** 为空，则返回 **True**，否则返回 **False**。 |
| length | *int*  | **count** 的同义词。                                     |
| size   | *int*  | **count** 的同义词。                                     |

| 方法名称   | **参数**                  | 返回值类型  | 描述                                                                                                                                                           |
| ------ | ----------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| assign | <**UnorderedSet**:from> | *none* | 将另一个 **UnorderedSet** 的内容复制到此 **UnorderedSet**。您还可以传递数组或 [**Vector**](/directory-opus/guan-fang-shou-ce/readme.zh-10/readme.zh-3/readme.zh/vector.zh.md) 对象。 |
| clear  | *none*                  | *none* | 清除 **UnorderedSet** 的内容。                                                                                                                                     |
| erase  | *variant*               | *none* | 如果元素存在于集合中，则擦除该元素。                                                                                                                                           |
| exists | *variant*               | *bool* | 如果指定的元素存在于集合中，则返回 **True**。                                                                                                                                  |
| insert | *variant*               | *bool* | 如果元素不存在，则将元素插入集合中。如果成功，则返回 **True**。                                                                                                                         |
| merge  | <**UnorderedSet**:from> | *none* | 将另一个 **UnorderedSet** 的内容与此 **UnorderedSet** 合并。                                                                                                             |
