跳转到内容

Set 方法

Set 通过和 Map key 相同的 ValueKey 策略存储唯一脚本值。unit、bool、 有限数字、char、string 和 bytes 等不可变叶子值按值比较;脚本堆对象和 host ref 按身份比较;PathProxy 等临时值会在修改前被拒绝。

set::from_array 从数组构造 Set。重复值会按 ValueKey 相等规则去重, 因此同一脚本对象的别名会合并,而字段相同但独立构造的对象仍然是不同元素。

fn main() {
let tags = set::from_array(["daily", "quest", "daily"]);
if tags.has("quest") && tags.len() == 2 {
return "ok";
}
return "missing";
}

valuesiter 产生 set value iterator。如果展示顺序重要,先 collect 再 sort。

fn main() {
let tags = set::from_array(["raid", "daily", "quest"]);
return tags.values().collect_array().sort().join(",");
}

add 插入新值时返回 true,值已存在时返回 falseremove 返回是否真的 移除了值。

fn main() {
let tags = set::from_array(["daily"]);
let added = tags.add("quest");
let removed = tags.remove("missing");
tags.extend(set::from_array(["raid", "daily"]));
return added && !removed && tags.len() == 3;
}

clear 移除所有值并返回 ()

unionintersectiondifferencesymmetric_difference 返回新 Set。 关系 helper 返回 bool。

fn main() {
let owned = set::from_array(["daily", "quest", "raid"]);
let required = set::from_array(["daily", "quest"]);
let event = set::from_array(["quest", "bonus"]);
let shared = owned.intersection(event);
return required.is_subset(owned)
&& owned.is_superset(required)
&& shared.has("quest");
}

Callback helper mapfilterfindanyallcount 与数组模型 一致。