アカウント名:
パスワード:
へー、どういう実装になっているんだろ。
[ruby-dev:24570] [nagaokaut.ac.jp] (と、 #1272878 [srad.jp] で紹介されている [ruby-list:43896] [nagaokaut.ac.jp] を含むスレッド) を読むと、ハッシュテーブルの各エントリーに、追加順で次のエントリーと前のエントリーへのポインターを付けて、二重リンクリストにしてあるようです。キーによる問合せをしたい場合はハッシュテーブルとして使い、要素を列挙したい場合はリストとして使います。
この方法だと、当然ながら、必要な領域の増分は 1 要素あたり定数、追加や削除に必要な時間の増分は 1 操作あたり定数、列挙は 1 要素ごとに定数時間でできます。削除が不要な場合は、追加順を保持しない通常のハッシュテーブルのほかに追加順を保持するためだけの配列なりリストなりを持つことが多いと思いますが、この方法に比べて Ruby で採用している方法には削除も速いという利点があります。
# Ruby はほとんど使っていません。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
身近な人の偉大さは半減する -- あるアレゲ人
rake, gem (スコア:2, 参考になる)
- rakeとgemが標準付属。
- Enumerable強化。enumerator組み込み。
- m18n。
- Hashが順序を保持。
あたりが大きい。
あと、何も知らずに1.9.0でRubyデビューしていらん苦労をする人が続出しそうなのが(ちょっと前から散見される)怖いな。
Re: (スコア:0)
についてもう少し知りたい。キーの順序を保持?
連想配列の実装が二分木になったとか、そういう話ですか?
Re:rake, gem (スコア:0)
Re: (スコア:0)
要素の追加順序を保持するHashクラス (スコア:1)
[ruby-dev:24570] [nagaokaut.ac.jp] (と、 #1272878 [srad.jp] で紹介されている [ruby-list:43896] [nagaokaut.ac.jp] を含むスレッド) を読むと、ハッシュテーブルの各エントリーに、追加順で次のエントリーと前のエントリーへのポインターを付けて、二重リンクリストにしてあるようです。キーによる問合せをしたい場合はハッシュテーブルとして使い、要素を列挙したい場合はリストとして使います。
この方法だと、当然ながら、必要な領域の増分は 1 要素あたり定数、追加や削除に必要な時間の増分は 1 操作あたり定数、列挙は 1 要素ごとに定数時間でできます。削除が不要な場合は、追加順を保持しない通常のハッシュテーブルのほかに追加順を保持するためだけの配列なりリストなりを持つことが多いと思いますが、この方法に比べて Ruby で採用している方法には削除も速いという利点があります。
# Ruby はほとんど使っていません。