1. ホーム
  2. ruby

[解決済み] 配列要素のインデックスを O(n) よりも高速に取得する。

2022-12-03 05:18:25

質問

巨大な配列と、そこからの値を持っているとします。私は、配列内の値のインデックスを取得したい。他の方法はありますか、むしろ呼び出す Array#index を呼び出すのではなく、それを取得するための他の方法はありますか?問題は、非常に巨大な配列を保持する必要性と Array#index を膨大な回数呼び出す必要があることに起因しています。

何度か試した後、私は キャッシング で構造体を格納することで、要素内部のインデックスをキャッシュすることができます。 (value, index) フィールドを持つ構造体を格納することで、パフォーマンスが大幅に向上します (20倍勝てる)。

それでも私は、キャッシュなしでen要素のインデックスを見つけるより便利な方法があるかどうか疑問に思います(または、パフォーマンスを向上させる良いキャッシュ技術があるかどうか)。

どのように解決するのですか?

配列をハッシュに変換します。その後、キーを探します。

array = ['a', 'b', 'c']
hash = Hash[array.map.with_index.to_a]    # => {"a"=>0, "b"=>1, "c"=>2}
hash['b'] # => 1