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


ペンギン  2008-03-13 18:20:03  No: 139258

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

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 19:43:54  No: 139259

私なら

       ' 項目の追加
        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 20:26:10  No: 139260

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


ペンギン  2008-03-14 11:39:15  No: 139261

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

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

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

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

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


魔界の仮面弁士  2008-03-14 13:07:22  No: 139262

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

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

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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加