(for Internet Explorer)
← ▼ ▲
↑
Dic_sub
Sub Dic_sub( out_Dic as Dictionary, WholeDic as Dictionary, BaseDic as Dictionary,
CompareFunc as function, CompareFuncParam as variant )
辞書を減算します。
【引数】
out_Dic
WholeDic
（出力） WholeDic から BaseDic を減算した結果の辞書
BaseDic に out_Dic を加算した結果と同一の内容が入った辞書
(src)
WholeDic - BaseDic = out_Dic の演算をします。
BaseDic に out_Dic を加算（Dic_add）した結果が、WholeDic になるような out_Dic を取得します。
out_Dic に、値が Empty の変数を指定すると、Dic_sub の内部で生成した辞書が取得できます。
同じキーのアイテムを CompareFunc した結果、等価でなければ、out_Dic にコピーされます。
辞書のアイテムがオブジェクトのときは、WholeDic のアイテムと同一のオブジェクトを指します。
BaseDic にあって WholeDic にないキーは、out_Dic にもできますが、アイテムは Empty と
なります。
out_Dic に Empty が入った変数を指定したら、内部で新しく辞書を生成します。
out_Dic に 辞書が入った変数を指定したときは、その辞書を空にしてから、その辞書に出力します。
BaseDic
Dic_add で加算する前と同一の内容が入った辞書
Dic_sub dic, _
Dict(Array( "Key1","Item1", "Key2","ITEMS", "Key3","Item3" )), _
Dict(Array( "Key1","Item1", "Key2","Item2", "Key4","Item4" )), _
Empty, Empty
'//[out] dic
'// dic = Dict(Array( "Key2","ITEMS", "Key3","Item3", "Key4",Empty ))
サンプル：
CompareFunc
CompareFuncParam
比較関数
通常 Empty、CompareFunc の第3引数
、Empty =
StdCompare
通常 Empty、
→ T_Dic.vbs # T_DicAdd
テスト
サンプル：
Dic_sub dic, whole_dic, base_dic, Empty, Empty '//[out] dic
← ▼ ▲
Dic_addInArrayItem
→ vbslib.vbs
ソース
→ T_Dic.vbs
テスト
T_DicArrayItem
関連
→ Dic_removeInArrayItem
Sub Dic_addInArrayItem( ref_Dictionary as dictionary of ArrayClass, _
in_Key as string, in_Item as variant )
配列をアイテムに持つ辞書に、配列の要素を追加します。
【引数】
ref_Dictionary
in_Key
配列をアイテムに持つ辞書
辞書のキー
in_Item
配列に追加するアイテム （オブジェクト または 非オブジェクト）
ref_Dictionary
Key, Item
ArrayClass
*
in_Item
*
データ構造
登録されていない辞書のキーを指定したときは、内部で ArrayClass のオブジェクトを新規作成して、
辞書のアイテムにします。
すでに登録されている辞書のキーを指定したときは、そのキーのアイテムである配列の末尾に
追加します。
内部の動作
Dic_addInArrayItem dic, "key", item
サンプル
要素でループする
For Each key In files.Keys
For Each item In files( key ).Items
:
Next
Next
同じ要素を重複して追加する可能性があるので注意してください。
→ Dic_addExInArrayItem
→ ArrayDictionary クラス
→ DicTable
← ▼ ▲
Dic_addExInArrayItem
Sub Dic_addExInArrayItem( ref_Dictionary as dictionary of ArrayClass, _
in_Key as string, in_Item as variant, _
in_CompareFunction as CompareFunction, in_ParameterOfCompareFunction as variant, _
in_Option as integer )
配列をアイテムに持つ辞書に、重複しないように、配列の要素を追加します。
【引数】
ref_Dictionary
in_Key
配列をアイテムに持つ辞書
辞書のキー
in_Item
配列に追加するアイテム、in_CompareFunction の第2引数
→ vbslib.vbs
ソース
→ T_Dic.vbs
テスト
T_DicArrayItem
in_CompareFunction
in_ParameterOfCompareFunction
比較関数
in_CompareFunction の第3引数
in_Option
c.ReplaceIfExist または c.IgnoreIfExist またはc.AddAlways
in_Option 引数の c は、g_VBS_Lib です。
c.ReplaceIfExist
c.IgnoreIfExist
比較関数が 0 を返す要素がすでにあるときは、置き換えます。
比較関数が 0 を返す要素がすでにあるときは、追加しません。
c.AddAlways
比較関数の結果に関わらず、追加します。
← ▼ ▲
Dic_removeInArrayItem
→ vbslib.vbs
ソース
→ T_Dic.vbs
テスト
T_DicArrayItem
Dic_removeInArrayItem dic, "KeyA", "ItemA", GetRef( "StdCompare" ), Empty, True, False
Sub Dic_removeInArrayItem( arg_Dictionary as dictionary of ArrayClass, _
in_Key as string, in_Item as variant, _
in_CompareFunction as CompareFunction, in_ParameterOfCompareFunction as variant, _
in_IsErrorIfNotFound as boolean, in_IsMultiRemove as boolean )
配列をアイテムに持つ辞書から、配列の要素を除外します。
【引数】
arg_Dictionary
in_Key
配列をアイテムに持つ辞書
辞書のキー
in_Item
比較対象のアイテム、in_CompareFunction の第2引数
関連
サンプル
→ Dic_addInArrayItem
in_CompareFunction
in_ParameterOfCompareFunction
in_IsErrorIfNotFound
in_IsMultiRemove
比較関数
in_CompareFunction の第3引数
１つも一致しなかったらエラーにするかどうか
複数の要素が一致したら、そのすべて除外するかどうか
in_IsErrorIfNotFound に True を指定すると、登録されていない辞書のキーを指定したときや、
比較対象のアイテムと一致する配列要素が１つのなかったときに、E_NotFoundSymbol エラー
になります。
参考
Dic_addInArrayItem
のデータ構造
辞書の中にある、指定されたキーに対応するアイテムを探し、
そのアイテムである配列の中のすべての要素に対して比較関数をコールバックし、
比較関数が 0を返したら、比較関数に渡した要素を配列から除外します。
配列の要素がすべて除外されたら、該当する辞書のキーやアイテムも除外します。
← ▼ ▲
Dic_searchInArrayItem
Function Dic_searchInArrayItem( ref_Dictionary as dictionary of ArrayClass, _
in_Key as string, in_Item as variant, _
in_CompareFunction as CompareFunction, in_ParameterOfCompareFunction as variant )
as array of integer
配列をアイテムに持つ辞書から、条件に合う配列番号を列挙します。
【引数】
ref_Dictionary
in_Key
配列をアイテムに持つ辞書
辞書のキー
in_Item
比較対象のアイテム、in_CompareFunction の第2引数
in_CompareFunction
in_ParameterOfCompareFunction
返り値
比較関数
in_CompareFunction の第3引数
配列番号の配列
indexes = Dic_searchInArrayItem( dic, "KeyA", "ItemA", GetRef( "StdCompare" ), Empty )
サンプル
→ vbslib.vbs
ソース
→ T_Dic.vbs
テスト
T_DicArrayItem
← ▼ ▲
Dic_getCountInArrayItem
Function Dic_getCountInArrayItem( ref_Dictionary as dictionary of ArrayClass ) as integer
配列をアイテムに持つ辞書に入っているすべての要素の数を返します。
【引数】
ref_Dictionary
返り値
配列をアイテムに持つ辞書
要素の数
→ vbslib.vbs
ソース
→ T_Dic.vbs
テスト
T_DicArrayItem
← ▼ ▲
GetDicItemAsArrayClass
Function GetDicItemAsArrayClass( Dic as dictionary, Key as string ) as ArrayClass
辞書のアイテムにある ArrayClass で参照します。 アイテムがなければ ArrayClass を作成します。
【引数】
Desc
Key
辞書
辞書のキー
返り値
辞書の要素である ArrayClass のオブジェクト
Dim dic, arr
Set dic = CreateObject( "Scripting.Dictionary" )
Set arr = GetDicItemAsArrayClass( dic, "key1" )
テスト
→ T_Dic.vbs # T_GetDicItem
サンプル
dic, "key1"
ソース
→ vbslib.vbs
指定したキーに対応するアイテムがないときは、新規作成した ArrayClass のオブジェクトを、
キーに対応するアイテムに追加します。
← ▼ ▲
Dic_searchParent
Function Dic_searchParent( Dictionay as dictionary, BasePath as string, Path as string ) as string
パスがキーに入っている辞書の中から、指定したパスの親フォルダーのパスを検索します。
【引数】
Dictionay
BasePath
検索対象の辞書
Dictionay 引数のキーがフル パスのときの基準（フル パス）、Empty 可
Path
検索キーとなるファイル、または、フォルダーのパス、または、Empty
サンプル
返り値
親フォルダーのパス、または、Empty = 見つからない
T_PathDictionary_SearchParent
→ vbslib.vbs
ソース
→ T_Wildcard.vbs
テスト
Set dic = CreateObject( "Scripting.Dictionary" )
dic( "123" ) = 0
dic( "123\456" ) = 0
Assert Dic_searchParent( dic, "C:\Folder", "123\456\a.txt" ) = "123\456"
Assert Dic_searchParent( dic, "C:\Folder", "123\4567\a.txt" ) = "123"
Assert IsEmpty( Dic_searchParent( dic, "C:\Folder", "123" ) )
サンプル
Function GetOrAddIfNot( Path )
If dic.Exists( Path ) Then
Set GetOrAddIfNot = dic( Path )
Else
Set parent_item = Dic_searchParent( dic, "C:\Folder", Path )
If IsEmpty( parent_item ) Then Error
Set sub_item = NewSubFromParent( parent_item, Path )
Set dic( Path ) = sub_item
Set GetOrAddIfNot = sub_item
End Sub
サブ フォルダーの Item を、親フォルダーの Item を参考に作成します
→ PathDictionaryClass
関連
の SearchParent
→ SearchParent
BasePath 引数は、Dictionay 引数のキーがフル パスのとき、かつ、Path が相対パスのときに必要です。
それ以外のときは、Empty を指定できます。
FileSystemObject::GetParentFolderName
に近い処理をします。
← ▼ ▲
Dic_searchChildren
Sub Dic_searchChildren( Dictionay as dictionary, BasePath as string,
Path as string, out_PathArray as array of string, Option_ as Empty )
パスがキーに入っている辞書の中から、指定したパスの子ノードのパスを検索します。
【引数】
Dictionay
BasePath
検索対象の辞書
Dictionay 引数のキーがフル パスのときの基準（フル パス）、Empty 可
Path
検索キーとなるファイル・フォルダーのパス、または、Empty
out_PathArray
（出力） 子のフォルダーまたはファイルのパスの配列
Option_
Empty を指定してください
サンプル
Set dic = CreateObject( "Scripting.Dictionary" )
dic( "123\456" ) = 0
dic( "123\456\File.txt" ) = 0
Dic_searchChildren dic, "C:\Folder", "123", an_array, Empty '//(out)an_array
Assert IsSameArray( an_array, Array( "123\456", "123\456\File.txt" ) )
Dic_searchChildren dic, "C:\Folder", "123\456", an_array, Empty '//(out)an_array
Assert IsSameArray( an_array, Array( "123\456\File.txt" ) )
Dic_searchChildren dic, "C:\Folder", "12", an_array, Empty '//(out)an_array
Assert IsSameArray( an_array, Array( ) )
BasePath 引数は、Dictionay 引数のキーがフル パスのとき、かつ、Path が相対パスのときに必要です。
それ以外のときは、Empty を指定できます。
T_PathDictionary_SearchChildren
→ vbslib.vbs
ソース
→ T_Wildcard.vbs
テスト
out_PathArray 引数の配列要素がフル パスか相対パスかは、Dictionay 引数のキーがフル パスか
相対パスかによります。
フォルダーとサブ フォルダーに入っているファイルを一覧することに近い処理をします。
← ▼ ▲
QuickSortDicByKey
ソース
→ vbslib.vbs
Sub QuickSortDicByKey( in_out_Dictionary as dictionary )
【引数】
in_out_Dictionary
ソートする辞書
辞書に入っているデータをクイック ソートします。 辞書のキーでソートします。
辞書の Item はオブジェクト（Set で代入するもの）を指定してください。
辞書の Keys の順番が変わります。
比較関数 PathCompare
を使ってソート（並べ替え）します。
関連
→ QuickSortDicByKeyForNotObject
→ 並べ替え、ソート
← ▼ ▲
QuickSortDicByKeyForNotObject
Sub QuickSortDicByKeyForNotObject( in_out_Dictionary as dictionary )
【引数】
in_out_Dictionary
ソートする辞書
辞書に入っているデータをクイック ソートします。 辞書のキーでソートします。
辞書の Keys の順番が変わります。
辞書の Item はオブジェクト以外（Set で代入しないもの）を指定してください。
ソース
→ vbslib.vbs
比較関数 PathCompare
を使ってソートします。
テスト
→ GetIdentifiableFileNames のテスト
← ▼ ▲
DicItemToNameOnlyClassItem
Sub DicItemToNameOnlyClassItem( ref_Dictionary )
オブジェクトではない辞書のアイテムを、NameOnlyClass のオブジェクトに変換します。
【引数】
ref_Dictionary
アイテムを変換する辞書
ソートできる辞書にします。
NameOnlyClass の Delegate メンバーは Empty になります。
Set dic = CreateObject( "Scripting.Dictionary" )
DicItemToNameOnlyClassItem dic
サンプル
ソース
→ vbslib.vbs
関連
→ ArrayToNameOnlyClassArray
配列版
テスト
→ GetIdentifiableFileNames のテスト
← ▼ ▲
NameOnlyClassItemToDicItem
Sub NameOnlyClassItemToDicItem( ref_Dictionary )
NameOnlyClass のオブジェクトが入っている辞書を、Name プロパティの値の辞書に変換します。
【引数】
ref_Dictionary
アイテムを変換する辞書
ソートできる配列から戻します。
Set dic = CreateObject( "Scripting.Dictionary" )
NameOnlyClassItemToDicItem dic
サンプル
ソース
→ vbslib.vbs
関連
配列版
→ NameOnlyClassArrayToArray
テスト
→ GetIdentifiableFileNames のテスト
← ▼ ▲
QuickSort_fromDic
Sub QuickSort_fromDic( Dic as dictionary, out_Arr as array of object,
CompareFunc as function, Param as variant )
【引数】
Dic
ソートするデータが入った辞書。（辞書はソートされません）
辞書に入っているデータ（Dictionary::Item）をクイックソートします。 比較関数を指定します。
（出力） ソートした結果の配列。配列の要素はオブジェクト
out_Arr
CompareFunc
比較関数
Param
compare_func の第3引数
→ QuickSort
(src)
サンプル
QuickSort_fromDic dic, arr, GetRef("StdCompare"), Empty '//[out]arr
関連
→ DicToArr
← ▼ ▲
QuickSort_fromDicKey
ソース
→ vbslib.vbs
Set dic = CreateObject( "Scripting.Dictionary" )
QuickSort_fromDicKey dic, sorted_items, Empty '//[out] sorted_items
For Each item In sorted_items
echo item.Key +" : "+ item.Item
Next
Sub QuickSort_fromDicKey( in_out_Dictionary as dictionary,
out_SortedKeysArray as array of string, in_Empty as Empty )
辞書に入っているデータをクイック ソートします。 辞書のキーでソートします。
【引数】
in_out_Dictionary
out_SortedKeysArray
ソートする前のキーが入った辞書
（出力） ソートした後のキーが入った配列。配列の要素は
in_Empty
Empty を指定してください
サンプル
DicElem オブジェクト
ソートした結果は、out_SortedKeysArray 引数に出力されます。
→ DicElemArrayKeyToArr
関連
比較関数 PathCompare
を使ってソートします。
← ▼ ▲
ShakerSortDicByKey
Sub ShakerSortDicByKey( Dic as Dictionary )
【引数】
Dic
ソートする辞書
辞書に入っているデータをシェーカーソートします。 辞書のキーでソートします。
テスト
→ T_ShakerSort.vbs
T_ShakerSortDicByKey
ソース
→ vbslib.vbs
辞書の Item はオブジェクト（Set で代入するもの）を指定してください。
比較関数 PathCompare
を使ってソート（並べ替え）します。
← ▼ ▲
ShakerSortDicByKeyCompare
Sub ShakerSortDicByKeyCompare( Dic as Dictionary,
CompareFunc as function, CompareFuncParam as variant )
【引数】
Dic
ソートする辞書
辞書に入っているデータをシェーカーソートします。 辞書のキーでソートします。
テスト
→ T_ShakerSort.vbs
T_ShakerSortDicByKeyCompare
ソース
→ vbslib.vbs
辞書の Item はオブジェクト（Set で代入するもの）を指定してください。
CompareFunc
比較関数
CompareFuncParam
CompareFunc の第3引数
ShakerSortDicByKeyCompare dic, GetRef( "NumStringCompare" ), Empty
サンプル
← ▼ ▲
ShakerSort_fromDic
Sub ShakerSort_fromDic( dic as Dictionary, out_arr as object array,
sign as integer, compare_func as function, param as variant )
【引数】
dic
ソートするデータが入った辞書。（辞書はソートされません）
辞書に入っているデータ（Dictionary::Item）をシェーカーソートします。
ソートした結果の配列。配列の要素はオブジェクト。
out_arr
compare_func
比較関数
param
compare_func の第3引数
参考
sign
→ ShakerSort
正の数＝dic の順がベース、負の数＝dicの逆順がベース(*1)
(*1) sign 引数の説明
dic.Item の For ループの順番どおりの配列を作成してからシェーカーソートを開始
するか、逆順の配列を作成してからシェーカーソートを開始するかを指定します。
sign < 0 のときでも、compare_func は、sign > 0 のときの compare_func の返り値の
マイナスを返すようにしてください。
(src)
← ▼ ▲
ShakerSort_fromDicKey
Sub ShakerSort_fromDicKey( Dic as Dictionary, out_Array as array of DicElem, Option_ as Empty )
【引数】
Dic
ソートするデータが入った辞書。（辞書はソートされません）
辞書に入っているデータをシェーカーソートします。 辞書のキーでソートします。
ソートした結果の配列。配列の要素は
out_Array
DicElem オブジェクト
(src)
Option_
Empty を指定してください
サンプル
Set dic = CreateObject( "Scripting.Dictionary" )
ShakerSort_fromDicKey dic, sorted_items, Empty '//[out] sorted_items
For Each item In sorted_items
echo item.Key +" : "+ item.Item
Next
dic, sorted_items
比較関数 PathCompare
を使ってソートします。
← ▼ ▲
ReverseDictionary
Sub ReverseDictionary( ref_Dictionary as Dictionary )
【引数】
ref_Dictionary
並びを逆にする辞書
辞書に入っているデータの並びを逆にします。
テスト
→ T_ShakerSort.vbs
T_ReverseDictionary
ソース
→ vbslib.vbs
← ▼ ▲
関連
→ ArrayDictionary クラス
← ▼ ▲
ツリー構造（木構造）、グラフ理論
← ▼ ▲
GraphVertexClass
GraphVertexClass の配列 ＝ グラフ
GraphVertexClass
Item
Item
Item
Item
GraphVertexClass
GraphVertexClass
GraphVertexClass
GraphVertexClass の配列は、内部構造が隣接リストである、グラフ理論のグラフです。
ツリー構造に使うこともできます。 （ツリー構造はグラフの特殊形です）
グラフは、任意の数の頂点（ノード、Vertex）と、任意の数の辺（Edge）から構成されます。
１つの GraphVertexClass は、頂点に相当し、AdjacentIndexes メンバー変数は、辺に相当します。
辺は、GraphVertexClass の配列の番号で表し、無向グラフでは必ず双方向に設定されます。
.Item
.AdjacentIndexes
ユーザーだけが設定＆参照する、頂点のオブジェクト
関数の内部で設定され、参照可能な、隣接頂点のグラフ全体の配列番号の配列
.ParentIndex
ユーザーも設定＆参照できる、親頂点（探索元）の配列番号
テスト
→ T_Tree.vbs
T_BreadthFirstSearch
ソース
→ vbslib.vbs
.Edges
関数の内部で設定され、参照も可能な、辺のオブジェクトの配列
.Index
頂点生成時に自動的に設定される、頂点番号。 グラフ全体の配列番号と同じ値
T_GraphVertexClass
関数
CreateGraphVertex
BreadthFirstSearch
SetEdgeInGraph
SetNDEdgeInGraph
GetEdgeInGraph
GetNDEdgeInGraph
GetDirectionIndex
ResetSearchDataOfGraphVertex
グラフの頂点を生成して、グラフに追加します。
グラフの辺にあたる変数に値を設定します。（有向グラフ）
グラフの辺にあたる変数に値を設定します。（無向グラフ）
グラフの辺にあたる変数の値を返します。（有向グラフ）
グラフの辺にあたる変数の値を返します。（無向グラフ）
辺の変数の中にある頂点に対応する配列番号を返します。
幅優先探索を行います。
前回探索した結果を格納する内部変数をリセットします。
1
0
2
3
4
上の図の番号は、グラフ全体の頂点配列（GraphVertexClass の配列）の配列番号です。
配列番号 2 の GraphVertexClass の AdjacentIndexes メンバー変数は、( 0, 1, 4 ) です。
配列番号 4 の GraphVertexClass の AdjacentIndexes メンバー変数は、( 2, 3 ) です。
メンバー変数
GraphVertexClass
Item
サンプル
Edge
Edge
Edge
Edge
… ライブラリが定義するクラス
… ユーザーが定義＆生成するクラス
→ グラフ （グラフ理論）
参考
←
↓