どなたか、ご存知の方がいたら、コメントいただけないでしょうか?
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)
--------------------------------------------------------
よろしくお願いします。
私なら
' 項目の追加
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"))
Valuesプロパティは追加した順ではないのでは?
http://msdn2.microsoft.com/ja-jp/library/ekcfxy3x(VS.80).aspx
もげさん!Blueさん!ありがとうございます。
To もげさん
まったく、思いつきませんでした。。。。
さすがです。。。
簡単で、わかりやすいので、この方法を真似させてもらおうと思います。
To Blueさん
おそらく
dict.values("1-3")
ということですよね?
最後のキーを知らないでも、最後に追加したデータを取り出したかったのです。
もし、方法があれば教えてもらえるとうれしいです。
> ' 全部ループしないと、分からないってのが、ちょっとかっこ悪い
ループだと、O(n) 操作になりますね。
(そもそも順番が保証されているとは限らないので、この方法の是非はありますが)
別案としては、Dictionary を継承したクラスを作り、そこに LastValue プロパティを実装する、という手もあります。
そして Add メソッド内にて、そのプロパティを更新していく、と。
ただし、Add メソッドが Overridable では無いので、Shadows で実装しなければならないのが難点…。