"OrderedHashSet" (数据结构)
"OrderedHashSet"
表示一个集合,其中的成员为普通表达式,成员资格则是用哈希函数计算的,并保留成员插入的顺序.
更多信息
- 有序哈希集可在保留插入顺序很重要的情况下高效插入和删除以及进行成员测试:
-
CreateDataStructure["OrderedHashSet"] 创建新的空 "OrderedHashSet" CreateDataStructure["OrderedHashSet",elems] 创建一个包含 elems 的新 "OrderedHashSet" Typed[x,"OrderedHashSet"] 指定 x 的类型为 "OrderedHashSet" - 对于类型为 "OrderedHashSet" 的数据结构,可进行以下操作:
-
ds["Complement",list] 从 ds 中删除出现在 list 中的元素 用时:O(n) ds["Copy"] 返回 ds 的副本 用时:O(n) ds["Elements"] 返回 ds 的元素列表 用时:O(n) ds["EmptyQ"] 如果 ds 中没有元素则返回 True 用时:O(1) ds["Delete",x] 从 ds 中删除 x,如果 x 是元素,返回 True 用时:O(1) ds["DeleteAll"] 删除 ds 的所有元素 用时:O(n) ds["Insert",x] 将 x 添加到集合中,如果添加成功则返回 True 用时:O(1) ds["Intersection",list] 从 ds 中删除没有出现在 list 中的元素 用时:O(n) ds["Length"] 返回存储在 ds 中的元素的数量 用时:O(1) ds["MemberQ",x] 如果 x 是 ds 的元素则返回 True 用时:O(1) ds["Pop"] 从 ds 中移除一个元素并将其返回 用时:O(1) ds["Union",list] 将 list 中出现的元素添加到 ds 中 用时:O(n) ds["Visualization"] 返回 ds 的可视化 用时:O(n) - 还支持以下函数:
-
dsi===dsj 如果 dsi 等于 dsj 则为 True FullForm[ds] ds 的完全形式 Information[ds] 关于 ds 的信息 InputForm[ds] ds 的输入形式 Length[ds] ds 的长度 Normal[ds] 将 ds 转换成普通表达式
范例
打开所有单元 关闭所有单元基本范例 (2)
可用 CreateDataStructure 创建新的 "OrderedHashSet":
ds = CreateDataStructure["OrderedHashSet"]ds["Insert", f[1]]ds["Length"]ds["MemberQ", f[1]]如果存储的不是表达式,则返回 False:
ds["MemberQ", f[2]]从集合中移除一个元素;如果该元素已成功移除,则返回 True:
ds["Delete", f[1]]Normal[ds]ds = CreateDataStructure["OrderedHashSet"];
Do[ds["Insert", i], {i, 100}]ds["Visualization"]ds["Elements"]范围 (16)
创建 (2)
创建一个空的 "OrderedHashSet":
CreateDataStructure["OrderedHashSet"]创建一个带有初始元素的 "OrderedHashSet":
CreateDataStructure["OrderedHashSet", {x, y, z}]信息 (1)
可用 CreateDataStructure 创建新的 "OrderedHashSet":
ds = CreateDataStructure["OrderedHashSet"]Information[ds]操作 (13)
"Complement" (1)
创建一个带有初始元素的 "OrderedHashSet":
ds = CreateDataStructure["OrderedHashSet", Range[100]]创建一个新的集合,其中包含存在于原始 "OrderedHashSet" 中但不在给定列表中的元素:
ds1 = ds["Complement", Range[50]]ds1["Elements"]"Copy" (1)
创建一个带有初始元素的 "OrderedHashSet":
ds = CreateDataStructure["OrderedHashSet", Range[4]]ds1 = ds["Copy"]{Normal[ds], Normal[ds1]}ds1["Insert", 42];
{Normal[ds], Normal[ds1]}"Elements" (1)
创建一个带有初始元素的 "OrderedHashSet":
ds = CreateDataStructure["OrderedHashSet", Range[10]]ds["Elements"]Normal 返回相同的列表:
Normal[ds]"EmptyQ" (1)
测试一个 "OrderedHashSet" 是否为空:
ds = CreateDataStructure["OrderedHashSet"];
ds["EmptyQ"]ds["Insert", f[x]];
ds["EmptyQ"]"Delete" (1)
从 "OrderedHashSet" 中删除一个元素;如果删除成功,则返回 True:
ds = CreateDataStructure["OrderedHashSet", {f[x], f[y], f[z]}];
ds["Delete", f[x]]删除集合中不存在的元素是不可能的,因此返回 False:
ds["Delete", f[w]]"DeleteAll" (1)
删除"OrderedHashSet"中的所有元素:
ds = CreateDataStructure["OrderedHashSet", Range[300]];
ds["DeleteAll"]ds["EmptyQ"]"Insert" (1)
向一个 "OrderedHashSet" 中插入一个元素;如果插入成功,则返回 True:
ds = CreateDataStructure["OrderedHashSet"];
ds["Insert", f[x]]无法再次插入相同的元素,因此返回 False:
ds["Insert", f[x]]"Intersection" (1)
创建一个带有初始元素的 "OrderedHashSet":
ds = CreateDataStructure["OrderedHashSet", Range[100]]创建一个新集合,其中仅包含原始 "OrderedHashSet" 和给定列表中共同的元素:
ds1 = ds["Intersection", Range[50]]ds1["Elements"]"Length" (1)
创建一个带有初始元素的 "OrderedHashSet":
ds = CreateDataStructure["OrderedHashSet", Range[100]]ds["Length"]Length 给出相同的值:
Length[ds]"MemberQ" (1)
测试一个元素是否存在于 "OrderedHashSet" 中:
ds = CreateDataStructure["OrderedHashSet", {f[x], f[y], f[z]}]{ds["MemberQ", f[x]], ds["MemberQ", f[w]]}"Pop" (1)
创建一个带有初始元素的 "OrderedHashSet":
ds = CreateDataStructure["OrderedHashSet", {f[x], f[y], f[z]}];
ds["Elements"]ds["Pop"]"Union" (1)
创建一个带有初始元素的 "OrderedHashSet":
ds = CreateDataStructure["OrderedHashSet", Range[10]]创建一个新的集合,其中包含原始 "OrderedHashSet" 和给定列表中都存在的元素:
ds1 = ds["Union", Range[10, 20]]ds1["Elements"]"Visualization" (1)
创建一个带有初始元素的 "OrderedHashSet":
ds = CreateDataStructure["OrderedHashSet", Range[300]]ds["Visualization"]应用 (2)
稳定去重 (1)
list = RandomChoice[{"A", "B", "C", "D"}, 20]ds = CreateDataStructure["OrderedHashSet"];
ds["Union", list];ds["Elements"]与 DeleteDuplicates 进行比较:
DeleteDuplicates[list]属性和关系 (5)
InputForm (1)
InputForm 返回 "OrderedHashSet" 的序列化内容:
InputForm[CreateDataStructure["OrderedHashSet", Range[10]]]DataStructure["OrderedHashSet", {"Data" -> Range[10]}]Length (1)
可以使用 Length 获取 "OrderedHashSet" 中的元素数量:
ds = CreateDataStructure["OrderedHashSet", Range[10]];
Length[ds]ds["Length"]Normal (1)
Normal 可用于获取 "OrderedHashSet" 的元素:
ds = CreateDataStructure["OrderedHashSet", Range[10]];
Normal[ds]ds["Elements"]SameQ (1)
SameQ 可用于测试两个哈希集合是否包含相同顺序的相同元素:
ds1 = CreateDataStructure["OrderedHashSet", Range[10]];
ds2 = CreateDataStructure["OrderedHashSet", Range[10]];
ds1 === ds2"HashSet" (1)
许多适用于 "HashSet" 的算法也适用于 "OrderedHashSet".
与 "HashSet" 不同,插入到 "OrderedHashSet" 中的元素,其顺序会被保留.
巧妙范例 (1)
历史
2020年引入 (12.1)