"Counter" (データ構造)
"Counter" (データ構造)
"Counter"
可変整数カウンタを表す.
詳細
- 可変整数カウンタは,プログラムの任意部分に含まれる要素の数を数えるのに使うことができる.
-
CreateDataStructure[ "Counter",i] 指定の初期値 i を持つ新しい"Counter"を作成する Typed[x,"Counter"] x に"Counter"型を与える - "Counter"型のデータ構造には,以下の演算が使える.
-
ds["AddTo",n] n をカウンタに加え,新しい値を返す time: O(1) ds["Copy"] ds のコピーを返す time: O(1) ds["Decrement"] カウンタを減少させ,古い値を返す time: O(1) ds["Get"] ds に保存されたカウンタの値を得る time: O(1) ds["Increment"] カウンタを増加させ,古い値を返す time: O(1) ds["PreDecrement"] カウンタを減少させ,新しい値を返す time: O(1) ds["PreIncrement"] カウンタを増加させ,新しい値を返す time: O(1) ds["Set",i] ds に保存されたカウンタが i となるように設定する time: O(1) ds["SubtractFrom",n] n をカウンタから引き,新しい値を返す time: O(1) ds["Visualization"] ds の可視化を返す time: O(1) - 以下の関数もサポートする.
-
dsi===dsj dsi が dsj に等しい場合はTrue FullForm[ds] ds の完全形 Information[ds] ds についての情報 InputForm[ds] ds の入力形 Normal[ds] ds を通常の式に変換する
例題
すべて開く すべて閉じる例 (1)
新しい"Counter"は,CreateDataStructureを使って作成できる:
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)
新しい"Counter"は,CreateDataStructureを使って作成することができる:
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を使って,2つのカウンタんひ同じ値が含まれるかどうかをテストすることができる:
ds1 = CreateDataStructure["Counter", 42];
ds2 = CreateDataStructure["Counter", 42];
ds1 === ds2ds1["Increment"];
ds1 === ds2履歴
2020 で導入 (12.1)