問題タブ [keyedcollection]
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.
c# - KeyedCollection は、Key がその中のアイテムの等価性を決定する場合にのみ意味されますか?
これは私たちが遭遇する一般的な問題だと思います。
このクラスがあるとします。KeyedCollection
次のように実装できます。
ここでは、デフォルトEquals
は に基づいてname
いますPerson
が、私の場合はごとcollection
に 1 つだけのカスタムを作成しています。つまり、 で一意になります。Person
place
place
collection
私は問題を理解しています。オーバーContains(Person)
ロードは、重複キー例外を引き起こす可能性がある内部ディクショナリに値を追加しCollection<T>.Contains(T)
ながら、値ベースの線形検索を行うものです。Add(Person)
ここで、等式が に基づいてplace
いれば、この問題は存在しなかったでしょう。
回避策があります:
しかし、これもまた、一般的なことを行う場合を意味します
を返しますtrue
が、実際にはまだJean
存在しcollection
ません。だから私の質問は、の一部だけに基づいているKeyedCollection<K, T>
場合にのみ意味がありますか? 私の質問はセマンティクス側ではほとんどありません。私は解決策を求めているわけではありませんが、いつ意味があるかについて一般的な理解があることを知っているだけですか? ドキュメントから、この件に関連するものは見つかりませんでした。Equals
K
T
KeyedCollection
アップデート:
ここで言及されている正確な問題を見つけましたhttp://bytes.com/topic/net/answers/633980-framework-bug-keyedcollection-t
質問者がバグレポートを MS に提出した場所。彼の言葉を引用すると (2007 年 4 月 18 日付け):
私はこれをバグとして Microsoft に提出しましたが、Microsoft はそれを確認して受け入れました。これは問題 ID 271542 で、次の場所で追跡できます。
「WinXP pro SP2 および VSTS2005 SP1 でこのバグを再現しました。このバグを Visual Studio 製品チーム内の適切なグループに送信して、トリアージと解決を図っています。」
これはバグではないと思いますが、これは確かに迷惑です。しかし、そもそも MS がこれをバグとしてどのように受け入れたのか疑問に思っています (おそらく、ページは現在見つかりません)。Imo、その継承モデルはよく考えられていません。
c# - SortedList と KeyedCollection の比較
最近、SortedList(key,value) をよく使用していますが、明らかな並べ替え部分を除いて、KeyedCollection(key, value) との違いを知りたいです。
たとえば、キーによってアイテムを取得する機能を必要とするクラスを構築していて、その並べ替えがそれほど重要ではない場合、次のうちどれがより適切なオプションですか?:
クラスの属性としての SortedList:
また
KeyedCollection の拡張
/li>
ありがとうございました。
c# - KeyedCollection エラー
私はC#コレクションにかなり慣れていません。この問題を解決する方法がわかりません。
このコード行
エラーを与える
これは私が持っているコードです。これを修正する方法がわかりません。
c# - この方法を理解する助けが欲しい
誰かが私のためにこれを明確にしてくれませんか。return (HashSet) this[typeof(T)]; 可能であれば例を挙げて。ありがとうございました
c# - 例外の Big O ランタイム
Dictionary<T>
のバッキング コレクションを持つカスタムがありKeyedCollection
ます。IndexOf(T key)
プロファイラーでの実行中に見られるパフォーマンスの問題を最適化しようとしているときに、これが問題領域の 1 つであることに気付きました。コードは現在、次のように実装されています。
Contains(T key)
と の両方が O(n) の big-O ランタイムをIndexOf(T key)
持っていることを知っており、MSDN サイトでこれを確認しました。( https://msdn.microsoft.com/en-us/library/ms132438(v=vs.110).aspx )
このコードを最適化する良い方法は、O(n) 操作の 1 つを取り出すことだと思いました、コードを次のように変更しました。
約 500,000 回の操作で 2 つのContains(T key)
実行時間を比較すると、out を使用したコードは、try-catch シナリオを 2 倍近く実行しました。
私の質問は、パフォーマンスを大幅に低下させる try-catch ブロックを使用するときに、大量のオーバーヘッドがあるかどうかです。
c# - 列挙型ビットマスクのディクショナリ
既存のソリューションを探しているか、Enum ビットマスクに基づいてアイテムを検索する問題を解決するソリューションを作成しています。基本的に、flag プロパティが設定された Enum があるので、これらの値をビットマスクに組み合わせることができます。私がやりたいことは、個々の値ごとにバケットを用意し、マスクでフラグが有効になっている各バケットにエントリを入れることです。
ディクショナリの値の部分は、エントリを含む一種のリストとして機能します。理想的には、コードの使用法は次のようになります。
値要素をリストとして持つディクショナリを使用してこれを行う方法については、すでに考えています。私の懸念は、このエラー ルックアップ メカニズムの独自のインスタンスを持つ何千ものオブジェクトを作成するときの効率です。このエラー ディクショナリの各インスタンスに何百ものエントリがあるとは思いません。各オブジェクトには N 個のフィールドしかなく、限られた数のビットマスクしかないためです。このため、リストまたはキー付きの設定し、リストに変換し、それに対して LINQ を実行して、エントリのさまざまな Enum バケットを見つけます。
編集:エラーはメモリ内でこのように見えると思います
そのため、Fields.Password にエラーがあるかどうかを UI が Errors に尋ねると、2 つが報告され、UI はそのフィールドにインジケーターを表示して、対応するエラーが報告されるようにします。リスト値を持つディクショナリはこれをほとんど解決できますが、それがメモリ内でどれほど効率的であるかが心配であり、オブジェクト全体の単一のリストが良くないかどうか疑問に思っています. Errors に Bitmask と ErrMsg 文字列が含まれている IE List() で、Linq に並べ替えさせます。