■76840 |
Re[1]: C#のインデクサーの辞書クラスについてです |
□投稿者/ 魔界の仮面弁士 -(2015/08/24(Mon) 13:06:54)
| 2015/08/24(Mon) 14:28:49 編集(投稿者)
この掲示板の利用ルールでは 『半角カナは使用しないでください。文字化けの原因になります。』 となっていますので、該当箇所は全角カナに置き換えて投稿します。
■No76836 (EDF さん) に返信 > このコードのインデクサー部分がなにをしているのかわかりません・・・・ Item のインスタンスが数珠繋ぎになっています。
Console.Write の行で一時停止させ、[デバッグ]-[ウィンドウ]メニューの 「ローカル」ウィンドウで 変数 dic を調べると、変数 dic 内では 下記のように、階層的にデータ管理されていることがわかります。
【dic】 ┗head (Item型) ├[key] ├[value] └[next] = (別のItem)
※実際のローカルウィンドウでは、アルファベット順に key, next, value と表示されます。
そしてこの next を展開していくと、下記のようになります。 http://www.vb-user.net/junk/replySamples/2015.08.24.13.10/20150824.png
【dic】 ┗head ☆0番目のItem(ルート) ├[key] = null (未使用) ├[value] = null (未使用) └[next] = ★1番目のItem ├[key] = "オマエモナ" ├[value] = "(´∀`)" └[next] = ★2番目のItem ├[key] = "ホ゜カーン" ├[value] = "( ゜д゜)" └[next] = ★3番目のItem ├[key] = "ハァハァ" ├[value] = "(;´Д`)" └[next] = ★4番目のItem ├[key] = "ハァ" ├[value] = "( ゜Д゜)?" └[next] = ◆終端(5番目のItem = null)
今回の Dictionary のインデクサは、最初に .head.next を参照します。 つまり、「★1番目のItem」の階層です。これは "オマエモナ" という "(´∀`)" のインスタンスです。
まずはインデクサの getter の動作についてですが:
もし、インデクサの引数 key が "オマエモナ" と一致していれば、 対応する .value 値すなわち "(´∀`)" を返します。
一致しない場合は、次の .next をさらに辿ります。 これを繰り返し、今回の "ハァハァ" に対応する「★3番目のItem」を 取得し、その .value 値 "(;´Д`)" を返すという仕組みです。
もし、一致する key が最後まで見つからなければ、null が返されます。
setter の場合も、同様な捜索処置が行われています。
setter では、.key が一致する Item が見つかれば、 その .value を書き換えますが、.key の合致するものが見つからなければ、 新たな Item を作り、それをリスト構造の先頭部に加えています。 |
|