0

オブジェクトを保存して、数字キーを使用してオブジェクトを取得できるようにします。これらのキーの範囲は0から任意のサイズ(たとえば、〜100K)ですが、範囲内のすべての自然数に対応するオブジェクトがあるわけではありません。

次のようなものがあります。

structure[0] => some_obj_a
structure[3] => some_obj_b
structure[7] => some_obj_c
...
structure[100103] => some_obj_z

ただし、他のすべてのキー(1、2、4、5、6、...)には、関連付けられたオブジェクトがありません。数値キーは検索に使用され、そのIDに関連付けられたオブジェクトを返すために「ID」が提供されます。

ID = get_input_id
my_obj = structure[ID]

Rubyでこのシナリオの最も効率的なデータ構造は何ですか?そして、どのような理由で?(これまでのところ、ハッシュまたは配列であることがわかります。)

私は「効率的」を次の観点から定義します。

  • 使用されるメモリが最も少ない
  • 最速のルックアップ時間
  • 最速のエントリ作成/更新(任意のキーで)

この構造の初期化は次のようになります。

hsh = Hash.new # or Array.new
hsh[0] = {:id => 0, :var => "a", :count => 45}
hsh[3] = {:id => 3, :var => "k", :count => 32}
hsh[7] = {:id => 7, :var => "e", :count => 2}
4

1 に答える 1

4

基本的に、スパース配列またはハッシュについて説明しました。

ハッシュは高速で、使用する必要のあるメモリのみを使用します。また、メモリ効率も高くなります。これには、これ以上高速になる「魔法の」データ構造はありません。ハッシュを使用します。

于 2012-11-28T23:56:52.093 に答える