Dictionaryクラスで最後のアイテムの取得方法


ペンギン  2008-03-13 09:20:03  No: 139258  IP: 192.*.*.*

どなたか、ご存知の方がいたら、コメントいただけないでしょうか?

Dictionaryクラスで最後に追加した項目を取得したいのですが、
みなさんならどうしますか?

私は、こんな方法でやっていますが、これがBESTな方法なのでしょうか?
うーん。。。あまり、かっこよくないので、他に良い方法があればコメントください。

--------------------------------------------------------
    Dim dict As New Dictionary(Of String, String)

    ' 項目の追加
    dict.Add("1-1", "あ")
    dict.Add("1-2", "い")
    dict.Add("1-3", "う")

    ' 最後に追加した項目を知りたい。
    Dim lastValue As String = ""
    For Each v As String In dict.Values
        lastValue = v
    Next

    ' これでようやく最後に追加した項目を知ることが出来る。。。
    ' 全部ループしないと、分からないってのが、ちょっとかっこ悪い
    Debug.Print(lastValue)
--------------------------------------------------------

よろしくお願いします。

編集 削除
もげ  2008-03-13 10:43:54  No: 139259  IP: 192.*.*.*

私なら

       ' 項目の追加
        dict.Add("LastValue", "")
        dict.Add("1-1", "あ")
        dict("LastValue") = "あ"
        dict.Add("1-2", "い")
        dict("LastValue") = "い"
        dict.Add("1-3", "う")
        dict("LastValue") = "う"

        ' 最後に追加した項目を知りたい。

        Debug.Print(dict("LastValue"))

編集 削除
Blue  2008-03-13 11:26:10  No: 139260  IP: 192.*.*.*

Valuesプロパティは追加した順ではないのでは?
http://msdn2.microsoft.com/ja-jp/library/ekcfxy3x(VS.80).aspx

編集 削除
ペンギン  2008-03-14 02:39:15  No: 139261  IP: 192.*.*.*

もげさん!Blueさん!ありがとうございます。

To もげさん
まったく、思いつきませんでした。。。。
さすがです。。。

簡単で、わかりやすいので、この方法を真似させてもらおうと思います。

To Blueさん
おそらく
dict.values("1-3")
ということですよね?

最後のキーを知らないでも、最後に追加したデータを取り出したかったのです。
もし、方法があれば教えてもらえるとうれしいです。

編集 削除
魔界の仮面弁士  2008-03-14 04:07:22  No: 139262  IP: 192.*.*.*

> ' 全部ループしないと、分からないってのが、ちょっとかっこ悪い

ループだと、O(n) 操作になりますね。
(そもそも順番が保証されているとは限らないので、この方法の是非はありますが)


別案としては、Dictionary を継承したクラスを作り、そこに LastValue プロパティを実装する、という手もあります。
そして Add メソッド内にて、そのプロパティを更新していく、と。

ただし、Add メソッドが Overridable では無いので、Shadows で実装しなければならないのが難点…。

編集 削除