問題タブ [autovivification]
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.
python - ネストされた辞書を実装するための最良の方法は何ですか?
私は本質的にネストされた辞書に相当するデータ構造を持っています。次のようになっているとしましょう。
さて、これを維持して作成するのはかなり苦痛です。新しい州/郡/職業があるたびに、不快なtry/catchブロックを介して下位層の辞書を作成する必要があります。さらに、すべての値を調べたい場合は、煩わしいネストされたイテレータを作成する必要があります。
次のように、タプルをキーとして使用することもできます。
これにより、値の反復が非常に単純で自然になりますが、集計や辞書のサブセットの確認などを行うのは構文的に面倒です(たとえば、状態ごとに実行したい場合など)。
基本的に、ネストされた辞書をフラットな辞書と見なしたい場合もあれば、実際に複雑な階層と見なしたい場合もあります。これをすべてクラスでラップすることもできますが、誰かがすでにこれを行っているようです。あるいは、これを行うためのいくつかの本当にエレガントな構文構造があるようです。
どうすればこれをより良くすることができますか?
補遺:私は知ってsetdefault()
いますが、それは実際にはきれいな構文にはなりません。また、作成する各サブディクショナリは、setdefault()
手動で設定する必要があります。
python - Pythonで辞書の辞書を初期化する最良の方法は何ですか?
多くの場合、Perl では次のようにします。
これを Python に翻訳するにはどうすればよいでしょうか。これまでのところ、私は持っています:
より良い方法はありますか?
perl - Perl で自動有効化を無効にするにはどうすればよいですか?
大きなチームによって「開発された」巨大なアプリケーションがあるとします;)。これは、誰かがデータ構造を深くチェックしすぎたときに発生する可能性のある災害の単純化されたモデルです。自動化を完全に、または範囲内で無効にすることができない場合、これを回避するにはどうすればよいですか? どうもありがとうございました :) !!!!
これにより、次が出力されます。
はい、警告があることは知っていますが、手遅れかもしれません。
私の hashref は、関連付けられた HASH を参照していると言うことが役に立ちます。
構造のより深い部分をチェックする優れた FETCH メソッドを実装すれば、問題を簡単に解決できるでしょうか?
Tie::StrictHash、Tie::Hash、およびperltieを見ました。これが私のソリューションの簡略版です:
私が達成したことは、アプリ内の 1 か所だけをタッチすることです。これで、if($some_ref->{deep}{doot}) のようなすべての場所で、スタック トレースでダイが発生します。だから私はそれらを簡単に見つけて修正します。そして、この種の新しい文章は不可能です。Perl は大規模なアプリにも適しています。詳しく知る必要があります ;)。
皆さん、ありがとうございました!これが他の人にも役立つことを願っています。
ruby - ルビーの自動活性化
私はRubyでautovivificationを使用して、これに関する単純なレコードの統合を試みてきました:
たとえば、A1 AINV BUY 9.15 のレコードが合計 6800 になるようにします。これは、autovivification を使用するのに最適な問題です。だから、私のコードは次のとおりです。
問題は、 h[@account][@ticker][@type][@price] の値をどのように合計しようとしても、次のエラーが発生することです。
さまざまな「自動生存化」方法を試してみましたが、結果はありませんでした。これは perl では起こりません! autofvivification は、あなたが何をしようとしているのかを知っています。Rubyにはこの機能がないようです。
だから私の質問は、どうすればRubyでレコードの単純な「統合」を実行できるかということです。具体的には、次のような合計を取得するにはどうすればよいですか。
h[@アカウント][@ティッカー][@タイプ][@価格]
助けてくれて本当にありがとうございます!!
グレンの解決策を明確にするために。それが与えることを除いて、それは完璧です(Ruby 1.9で標準のCSVライブラリを使用するためのいくつかの変更があります:
次のエラーが発生します。
perl - この場合、Perl の自動有効化が機能するのはなぜですか?
このPerlプログラムの出力を理解するのを手伝ってくれる人がいます:
そして出力:
「フ」はどこから来たのですか?ダンパーで出力されないのはなぜですか?
割り当ての順序を入れ替えると、次のようになります。
私の出力は私が期待するものです:
編集:use strict;
これがキャッチされることはわかっていますが、文字列「foo」がまだどのように出力されているかを知りたいです。
perl - この場合、なぜ Perl は自動活性化するのですか?
$a
が配列参照になるのはなぜですか? 私はそれに何も押し付けていません。
python - 高度な Python ハッシュ自動有効化を行うにはどうすればよいですか?
この質問は、Python での完全な Perl 自動有効化の実装に関するものです。以前にも同様の質問があったことは知っていますが、これまでのところ、最良の答えは「Python でネストされた辞書を実装する最良の方法は何ですか?」です。しかし、私はこれをやろうとしています:
最初に宣言せずa['x']['y'] = []
に、または宣言せずにa['x'] = {}
。(Perlではできることに注意してくださいpush @{$a->{x}{y}}, 'z';
。)
私は知っていてdict
、list
クラスは混在しないので、これは難しいですが、誰かがおそらく継承されたクラスを作成することを含む独創的な解決策を持っているかどうかを知りたいのですが、それに新しいメソッドをdict
定義しましたか?append
また、これにより、Perl に固執するように頼まれる Python 純粋主義者の一部が気を失う可能性があることもわかっています。でも、挑戦するだけでも何か見てみたい。
python - dictのdictで、Perlの自動生存動作をどのようにエミュレートしますか?
グーグルとオンラインドキュメントの両方が私のクエリについて多くの洞察を提供していないので、私はここのコミュニティに尋ねると思いました。
Perlでは、ハッシュ・オブ・ア・ハッシュ・オブ・ア・ハッシュを簡単にセットアップして、次のように最終キーをテストできます。
Pythonの「ベストプラクティス」に相当するものは何ですか?
ruby - Ruby の new 演算子を使用した自動有効化ハッシュの複数の初期化
1行の式でいくつかの自動有効化ハッシュを初期化したいと思います。これまでのところ、AutoHash
オブジェクトの追加メソッドにたどり着きました:
これにより、次のことが可能になります
ただし、新しい演算子を定義することで、次の文が可能になると思います:=
これを実装するのを手伝ってもらえますか?
superatorsを使用する必要がありますか?
更新:これで、演算子をクラス外で定義する必要があることがわかりました。そのようなオブジェクト クローン オペレータを定義することは可能ですか?
Update2メソッドのより明確な定義、few
Joshuaのおかげ
参考文献
ruby - Rubyで自動活性化ハッシュの組み合わせ[]+=を処理するにはどうすればよいですか?
Rubyハッシュの自動活性化を実装するために、次のクラスを使用できます。
このクラスでは、次のことができます
Joshuaによって提案されたこのクラスのもう少し高度な定義がありますが、これは私には理解するのが少し難しいです。
問題
新しいクラスを改善できると思う状況が1つあります。次のコードはエラーメッセージで失敗しますNoMethodError: undefined method '+' for {}:AutoHash
あなたはそれを処理するために何をしますか?[]+=
演算子を定義できますか?
関連する質問