問題タブ [associative-array]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
apache-flex - フレックスの煩わしさ-連想配列
私は連想配列を持っており、この配列を反復処理しながら、foreachループを使用しています。フレックスは注文を失っています。これはとても迷惑です。
なぜこうなった?
どうすればこれを回避できますか?
string - 文字列の定数時間ハッシュ?
SO に関する別の質問では、一部の言語で、文字列をハッシュしてテーブル内で高速に検索できるようにする機能が取り上げられました。この 2 つの例は、.NET の Dictionary<> と Python の {} ストレージ構造です。他の言語は確かにそのようなメカニズムをサポートしています。C++ にはそのマップがあり、LISP にも同等のマップがあり、他のほとんどの最新の言語と同様です。
文字列のハッシュ アルゴリズムは一定時間内に実行できるという質問への回答で、プログラミングで 25 年の経験を持つ 1 人の SO メンバーが、あらゆるものを一定時間内にハッシュできると主張することで争われました。私の個人的な主張は、特定のアプリケーションが文字列の長さに境界を設定しない限り、これは正しくないということです。これは、定数 K によって文字列の最大長が決まることを意味します。
私は演算にハッシュ関数を使用する Rabin-Karp アルゴリズムに精通していますが、このアルゴリズムは使用する特定のハッシュ関数を指示しません。著者が提案したのは O(m) で、m は長さです。ハッシュされた文字列。
いくつかのハッシュ アルゴリズムを表示するこのページ ( http://www.cse.yorku.ca/~oz/hash.html )などの他のページをいくつか見ますが、それぞれが文字列の全長にわたって繰り返されるようです。その値に到達します。
この件に関する私の比較的限られた読書から、文字列型のほとんどの連想配列は、実際には、フードの下で何らかのツリーで動作するハッシュ関数を使用して作成されているようです。これは、キー/値ペアの値要素の場所を指す AVL ツリーまたは赤/黒ツリーの場合があります。
このツリー構造でも、n をツリーの要素数として theta(log(n)) のオーダーを維持するには、一定時間のハッシュ アルゴリズムが必要です。それ以外の場合は、文字列を反復処理するという追加のペナルティがあります。多くの文字列を含むインデックスの場合、theta(m) は theta(log(n)) によって隠されますが、検索対象のテキストが非常に大きくなるようなドメインにいる場合は無視できません。
接尾辞ツリー/配列と Aho-Corasick を使用すると、検索を theta(m) まで下げてメモリをより多く消費できることを認識していますが、任意の長さの文字列に対して一定時間のハッシュ メソッドが存在するかどうかを具体的に尋ねています。他の SO メンバーによって主張されました。
ありがとう。
actionscript-2 - ActionScript 2:反復せずに連想配列のキーの数を決定するにはどうすればよいですか?
配列を反復処理せずに、ActionScript 2連想配列のキーの数を判別できる関数はありますか?
3を返す「o.size」または「o.length」があると思います。
ありがとう。
java - JAVA myString['name'] = "私の値"; (PHPのように)
Phpでは、私はこれをよく使います:
Java 1.6 で同じことを行う方法。私はこれをやろうとしました:
しかし、それは私にエラーを与えます。エラーリストの宣言があるため、これを機能させたいのですが、次を特定することをお勧めします。
より:
新しいクラスを作成して、オブジェクトをスローできることはわかっています。
しかし、私は最初のものを好みます (Php で使用するものと同じです)。
それで、何かアイデアはありますか?
php - 連想配列をループしてキーを取得する方法は?
私の連想配列:
次のコードを使用すると、の値$v
が入力されます$arr
$arr
代わりに のキーを取得するにはどうすればよいですか?
c++ - 複数のキータイプを持つ連想配列は可能ですか?
コンテナーに格納する必要がある大量のオブジェクト (場合によっては 1000 個) があります。ID 番号 (64 ビット符号なし int) または名前 (std::string) のいずれかで、特定のインスタンスを 2 つの方法で検索できる必要があります。通常は ID による方法が最も一般的ですが、場合によっては、名前はわかっていても ID はわかりません。
std::map は単一の <-> 値を提供できますが、2 セットの std::map コンテナー (1 つは ID 用、もう 1 つは文字列用) を持つことがここでの最善のアプローチであるかどうかはわかりません。
編集 - 改訂されたコードとエラー:
とにかくブーストがあるので、マルチインデックスを試してみようと思いましたが、私が知る限り、ドキュメントとまったく同じように実行したにもかかわらず、コンパイルできないようです:(
テストコード:
そしてあなたの平均ブーストテンプレートエラー...
c:\lib\c++\boost\boost\aligned_storage.hpp(69): エラー C2872: 'detail': あいまいなシンボル
は 'boost::detail'
または 'boost::multi_index::detail'
c:\lib\の可能性がありますc++\boost\boost\multi_index\detail\index_node_base.hpp(42) : クラス テンプレートのインスタンス化 'boost::aligned_storage' が
[
size_
=4、
alignment_=4
]
c:\lib\c++\boost\でコンパイルされている参照を参照してくださいboost\multi_index\detail\index_node_base.hpp(47) : クラス テンプレートのインスタンス化 'boost::multi_index::detail::pod_value_holder' への参照を参照してください [ Value=MyClass * ]でコンパイル
されている
c:\lib\c++\boost\boost\multi_index\detail\ord_index_node.hpp(582) : クラス テンプレートのインスタンス化への参照 'boost::multi_index::detail::index_node_base' が [ Value=MyClass *, Allocatorでコンパイルされ
ている] を参照してください=std::allocator ] c:\lib\c++\boost\boost\multi_index\ordered_index.hpp(137) : [ Super=でコンパイル さ れているクラス テンプレートのインスタンス化 'boost::multi_index::detail::ordered_index_node' への参照を参照してください。boost::multi_index::detail::index_node_base> ]
c:\lib\c++\boost\boost\multi_index\ordered_index.hpp(119) : [ KeyFromValue=boost::multi_index::でコンパイル
さ れているクラス テンプレートのインスタンス化 'boost::multi_index::detail::ordered_index' への参照を参照してください。const_mem_fun, Compare=std::less,std::allocator>>, SuperMeta=boost::multi_index::detail::nth_layer<2,MyClass *,boost::multi_index::indexed_by>,boost::multi_index::ordered_unique >>,std::アロケーター>, TagList=boost::mpl::vector0, Category=boost::multi_index::detail::ordered_unique_tag ]
c:\lib\c++\boost\boost\multi_index_container.hpp(86) : [ KeyFromValue=boost::multi_index::const_mem_fun
, Compare=std::less, SuperMeta=boost::multi_index::detail::nth_layer<1,MyClass *,boost::multi_index::indexed_by>,boost::multi_index::ordered_unique>>,std::allocator>, TagList=boost::mpl::vector0, Category=boost::multi_index::detail::ordered_unique_tag ]
c:\projects\bad_angle_studios\brak3\trunk\source\source\server\MyClass.cpp(18) : [ Value=MyClass *, IndexSpecifierList=でコンパイル
さ れているクラス テンプレートのインスタンス化 'boost::multi_index::multi_index_container' への参照を参照してくださいboost::multi_index::indexed_by>,boost::multi_index::ordered_unique>> ] c:\lib\c++\boost\boost\aligned_storage.hpp(53): エラー C2872: 'detail': あいまいなシンボル は 'boost である可能性があります::detail' または 'boost::multi_index::detail' c:\lib\c++\boost\boost\aligned_storage.hpp(56) : クラス テンプレートのインスタンス化への参照を参照してください 'boost::detail::aligned_storage::aligned_storage_imp: :data_t'コンパイル中
[
size_=4、 alignment_
=4
] c:\lib\c++\boost\boost\aligned_storage.hpp(69) : クラス テンプレートのインスタンス化 'boost::detail::aligned_storage::aligned_storage_imp' が [でコンパイル されて
いる参照を参照してください。 size_=4、 alignment_=4 ] c:\lib\c++\boost\boost\aligned_storage.hpp(73): エラー C2872: 'detail': あいまいなシンボル は 'boost::detail' または 'boost::multi_index: :詳細'
c:\projects\bad_angle_studios\brak3\trunk\source\source\server\MyClass.cpp(44): エラー C2676: バイナリ '[': 'MyClassList' は、この演算子または定義済みに受け入れられる型への変換を定義していませんオペレーター
php - PHP: 連想配列の n 番目の項目を取得する
連想配列がある場合:
そして、2 番目の項目にアクセスしたいのですが、どのようにしますか? $arr[1]
動作していないようです:
このコードは以下を生成するはずです:
ただし、空白のエントリが生成されるだけです。
javascript - JavaScript で連想配列のキーとして整数を使用する
新しい JavaScript 配列を作成し、整数をキーとして使用すると、その配列の整数までの各要素が未定義として作成されます。
例えば:
2298 個の undefined と 1 個の「Some string」が出力されます。
JavaScript で 2300 を整数ではなく文字列として使用するにはどうすればよいですか? または、2299 の空のインデックスをインスタンス化しないようにするにはどうすればよいですか?