"Counter" (数据结构)
"Counter" (数据结构)
"Counter"
表示一个可变的整数计数器.
更多信息
- 可变整数计数器可用于统计程序任意部分中元素的数量:
-
CreateDataStructure[ "Counter",i] 用指定的初始值 i 创建新的 "Counter" Typed[x,"Counter"] 指定 x 的类型为 "Counter" - 对于类型为 "Counter" 的数据结构,可进行以下操作:
-
ds["AddTo",n] 将 n 添加到计数器中,返回新的值 时间:O(1) ds["Copy"] 返回 ds 的拷贝 时间:O(1) ds["Decrement"] 计数器递减,返回旧值 时间:O(1) ds["Get"] 获取存储在 ds 中的计数器的值 时间:O(1) ds["Increment"] 计数器递增,返回旧值 时间:O(1) ds["PreDecrement"] 计数器递减,返回新值 时间:O(1) ds["PreIncrement"] 计数器递增,返回新值 时间:O(1) ds["Set",i] 将存储在 ds 中的计数器设为 i 时间:O(1) ds["SubtractFrom",n] 从计数器中减去 n,返回新值 时间:O(1) ds["Visualization"] 返回 ds 的可视化 时间:O(1) - 还支持以下函数:
-
dsi===dsj 如果 dsi 等于 dsj 则为 True FullForm[ds] ds 的完全形式 Information[ds] 关于 ds 的信息 InputForm[ds] ds 的输入形式 Normal[ds] 将 ds 转换成普通表达式
范例
打开所有单元 关闭所有单元基本范例 (1)
可用 CreateDataStructure 创建新的 "Counter":
ds = CreateDataStructure["Counter", 1]ds["Get"]ds["Increment"]ds["Get"]Normal[ds]ds["Visualization"]范围 (13)
可变性 (2)
创建一个新的 "Counter" 数据结构并初始化:
ds = CreateDataStructure["Counter", 0]f = Function[{arg}, If[EvenQ[arg], ds["Increment"]]];Scan[f, {1, 2, {6, 7, 2, {6, 1}}}, {-1}]ds["Get"]创建一个新的 "Counter" 数据结构并初始化:
ds = CreateDataStructure["Counter", 0]ds["Increment"] === ds["Get"]ds["PreIncrement"] === ds["Get"]ds["Set", 100] === ds["Get"]{ds["AddTo", 20], ds["Get"]}{ds["SubtractFrom", 40], ds["Get"]}信息 (1)
可用 CreateDataStructure 创建新的 "Counter":
ds = CreateDataStructure["Counter", 1]Information[ds]操作 (10)
"AddTo" (1)
创建一个初始化为 1 的新 "Counter":
ds = CreateDataStructure["Counter", 1]ds["AddTo", 10]ds["Get"]"Copy" (1)
创建一个初始化为 1 的新 "Counter":
ds = CreateDataStructure["Counter", 1]ds1 = ds["Copy"]{Normal[ds], Normal[ds1]}ds1["Increment"];
{Normal[ds], Normal[ds1]}"Decrement" (1)
创建一个初始化为 1 的新 "Counter":
ds = CreateDataStructure["Counter", 1]ds["Decrement"]ds["Get"]"Get" (1)
创建一个初始化为 1 的新 "Counter":
ds = CreateDataStructure["Counter", 1]ds["Get"]"Increment" (1)
创建一个初始化为 1 的新 "Counter":
ds = CreateDataStructure["Counter", 1]ds["Increment"]ds["Get"]"PreDecrement" (1)
创建一个初始化为 1 的新 "Counter":
ds = CreateDataStructure["Counter", 1]ds["PreDecrement"]ds["Get"]"PreIncrement" (1)
创建一个初始化为 1 的新 "Counter":
ds = CreateDataStructure["Counter", 1]ds["PreIncrement"]ds["Get"]"Set" (1)
创建一个初始化为 1 的新 "Counter":
ds = CreateDataStructure["Counter", 1]ds["Set", 5]ds["Get"]"SubtractFrom" (1)
创建一个初始化为 52 的新 "Counter":
ds = CreateDataStructure["Counter", 52]ds["SubtractFrom", 10]ds["Get"]"Visualization" (1)
创建一个初始化为 42 的新 "Counter":
ds = CreateDataStructure["Counter", 42]ds["Visualization"]应用 (3)
生成唯一 ID (1)
在求值过程中使用 "Counter" 生成顺序的唯一标识符:
id = CreateDataStructure["Counter", 0];
newID[] := id["PreIncrement"];Table[newID[], 5]递归调用计数 (1)
将可变状态传递给函数 (1)
将 "Counter" 传递给函数并在求值过程中改变它:
countPrimes[data_, counter_] := Scan[If[PrimeQ[#], counter["Increment"]]&, data];counter = CreateDataStructure["Counter", 0];
countPrimes[Range[1000], counter];
counter["Get"]countPrimes[Range[1001, 10000], counter];
counter["Get"]属性和关系 (4)
InputForm (1)
Normal (1)
SameQ (1)
SameQ 可用于测试两个计数器是否包含相同的值:
ds1 = CreateDataStructure["Counter", 42];
ds2 = CreateDataStructure["Counter", 42];
ds1 === ds2ds1["Increment"];
ds1 === ds2历史
2020年引入 (12.1)