<?xml version="1.0" encoding="Shift_JIS" ?>
<doc>

<title>Dictionary クラス</title>

<para>
<ptitle>Dictionary クラス</ptitle>
　Dictionary クラスは<kw>辞書配列</kw>を扱うクラスです。<r/>
<r/>
　辞書配列は<kw>連想配列</kw>とも呼ばれ、名前と、それに結びつけられた値を一つのペアとして、それを複数保持するオブジェクトです。<r/>
　配列と同じように <kw>[ ]</kw> (間接参照) 演算子でアクセスしますが、添え字の代わりに文字列を使い、それが名前となります。名前が識別子として有効なものであれば、 <kw>.</kw> (直接参照) 演算子も使うことができます。<r/>
　また、存在しない名前を参照すると void になります。<r/>
　要素を削除するには delete 演算子を使います。<r/>
<example>
	var d=new Dictionary();<r/>
	d["sat"] = 1; // d.sat = 1 と同じ<r/>
	d["sun"] = 2; // d.sun = 2 と同じ<r/>
	d["mon"] = 3; // d.mon = 3 と同じ<r/>
	d["name"] ="value!"; // d.name = "value!" と同じ<r/>
	d["continue"] = 4; // continue は識別子ではないが OK<r/>
	d.continue = 4; // continue は識別子ではないのでエラー<r/>
<r/>
	var sat = d["sat"]; // 1 が代入される<r/>
	var none = d["none"]; // void が代入される<r/>
<r/>
	delete d.sat; // sat を削除<r/>
	delete d["continue"]; // continue を削除<r/>
</example>
<r/>
</para>


<para>
<ptitle>式中辞書配列</ptitle>
　<tt><kw>%[ ]</kw></tt> を使って、式中に <tt>Dictionary</tt> クラスのオブジェクトをその場で記述することができます。要素名 => 要素の値、をカンマで区切り、初期要素となる式を列挙します。たとえば、<r/>
<tt>
	var dic = %["a" => 1, "b" => 2, "c" => 3];<r/>
</tt>
　と記述すれば、<tt>dic</tt> に、要素名と要素の組がそれぞれ <tt>"a":1</tt>、 <tt>"b":2</tt>、 <tt>"c":3</tt>  となる <tt>Dictionary</tt> クラスのオブジェクトへの参照が代入されます。<r/>
　内部的には、<tt>=></tt> はカンマと全く同じものですが、読みやすさを考え、<tt>=></tt> を使用できるようになっています ( perl と同じです )。<r/>
</para>

<para>
<ptitle>Dictionary クラスのメソッドへのアクセス</ptitle>
　Dictionary クラスのオブジェクトは、作成された状態ではメンバを何一つ持っていません。<r/>
　たとえば、assign メソッドを使おうと思って、Dictionary クラスのオブジェクト dict に対して<tt>dict.assign(src)</tt> のように記述しても、dict が assign というメソッドを持っていないためにエラーになります。<r/>
　したがって、<kw>incontextof</kw> 演算子を使って、Dictionary クラスに直接属しているメソッドを、対象となる Dictionary クラスのオブジェクトをコンテキストとして実行させます。<r/>
<example>
	var a = %[];<r/>
	var b = %[];<r/>
	(Dictionary.assign incontextof a)(b); // b を a にコピー<r/>
	(Dictionary.clear incontextof b)(); // b の内容をクリア<r/>
</example>
</para>

<para>
<ptitle>saveStruct</ptitle>
　saveStruct はファイルへ構造化されたデータの出力を行います。<r/>
　<link href="array"/> の同メソッド参照してください。<r/>
</para>

<para>
<ptitle>assign</ptitle>
　assign メソッドは、辞書配列をコピーします。<r/>
<bq>
構文 : assign(&lt;コピー元辞書配列>, &lt;内容をクリアするか=true>)<r/>
</bq>
　引数で指定された他の辞書配列の内容を、そっくりコピーします。<r/>
　「内容をクリアするか」が偽の場合は、コピー先 (メソッドを実行するオブジェクト) の内容をクリアせず、コピー元辞書配列の内容を上書きします。コピー元辞書配列と同じ名前のメンバがコピー先辞書配列にあった場合は、コピー元の内容でコピー先が上書きされます。<r/>
<r/>
　配列 (Arrayクラスのオブジェクト) をコピー元配列に指定した場合は、その配列には、この辞書配列のメンバとなるべき要素が名前、値の順に並んでいるとみなし、その配列の内容をこの辞書配列にコピーします。<r/>
</para>

<para>
<ptitle>assignStruct</ptitle>
　assignStruct メソッドは、辞書配列をコピーします。<r/>
<bq>
構文 : assignStruct(&lt;コピー元辞書配列>)<r/>
</bq>
　引数で指定された他の辞書配列の内容を、そっくりコピーします。<r/>
　assign メソッドと違い、メンバに配列あるいは辞書配列があった場合は、再帰的にその内容も
コピーします ( assign メソッドの場合は参照がコピーされるだけです )。<r/>
</para>

<para>
<ptitle>clear</ptitle>
　clear メソッドは、辞書配列の内容をすべて消去します。<r/>
</para>


</doc>
