問題タブ [icomparable]
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# - 3 つのオブジェクトの比較
C# でジェネリック バイナリ ツリーをコーディングしています。
アプリケーションの一部で、距離の順に並べ替える必要があります。
AからCへ、BからCへ。
このようなもの:
しかし、問題は、2 つのオブジェクト間でしか比較できないことです...そして、ある種のコンパレーターが必要です。
「開始と終了の間の距離」のようなクラスを作成することは正しい解決策ですか? ゴミが多すぎると思います。
解決策はありますか?ありがとう ;-)
編集:
動作する IComparer がありません...
編集:
問題が解決し、IComparer が動作するようになりました!
ありがとう ;-)
c# - 動的比較のための IComparable の実装
現在の状況に応じてaCircle
から aを取得する必要がありますList<Circle>
MousePosition
サークルクラスです
リストからサークルを取得する方法は次のとおりです
これは小さなリストでは問題なく機能しますが、リストが大きくなるにつれて遅くなります。List.BinarySearch を使用してパフォーマンスを向上させることができると思いますがIComparable
、このシナリオで実装する方法がわかりませんでした。
c# - INT の「少なくとも 1 つのオブジェクトは IComparable を実装する必要があります」? 私の知る限り、そうです
OK、私は単純なものを持っていIEnumerable<HtmlString> things
ます。それを 4 つの等しいグループに分割したいと思います。
トリックを行う必要がありますが、代わりにこのファンキーさが得られます:
「/」アプリケーションでサーバー エラーが発生しました。少なくとも 1 つのオブジェクトが IComparable を実装する必要があります。説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。
例外の詳細: System.ArgumentException: 少なくとも 1 つのオブジェクトが IComparable を実装する必要があります。
36 行目: int Quarter = things.OrderBy(t => t.Foo).Count() / 4;
ここで何が起こっているのか知っている人はいますか?単純なカウントを取得するために IComparable を実装する必要があるのはなぜですか?
c# - C#-辞書>ソートはSystem.ArgumentExceptionをスローしています
私はソートされていません。Dictionary<int, Dictionary<int, string>>
その値のキーをソートしようとするとSystem.ArgumentException: At least one object must implement IComparable.
、次の関数がスローされます。
下のデータスクリーンショットを添付します。ここでは、キーが並べ替えられていないことがわかります。これにより、私が何を達成しようとしているのかがわかります。確かに、私は何か間違ったことをしているので、ガイダンスが必要です。ありがとうございます。
c# - ジェネリック クラスを特定のインターフェイスにバインドする
私はジェネリッククラスを作ろうとしています。IComparable
実装するオブジェクトのみをジェネリックに渡すことができるように制約を作成する方法はありますか? 例えば:
うまくいけば、私の例は明確です。MyClass<T>
を実装するオブジェクトを許可したいだけですIComparable
。where
私が間違っていなければ、制約はクラスでのみ機能することを理解しています。これは可能ですか、または誰かが回避策を提供できますか?
c# - リストを作成するためにどのインターフェースを実装する必要がありますかまたは辞書2 つの値をキーとして連結する
カスタム オブジェクトをディクショナリ、リストなどで正しく機能させる必要があります。これにより、オブジェクトのプロパティを変更し、再ソートして孤立させないようにすることができます。
前回 GetHashCode() のオーバーライドを試みたとき、オブジェクトをディクショナリに追加したときにオブジェクトを孤立させ、オブジェクトに変更を加えた (GetHashCode が変更された) ため、ディクショナリがメモリからオブジェクトを適切に破棄できませんでした。
質問
誰かが説明できますか:
int
ソートされたディクショナリで連結してTrustedEntity
正しく機能させるために、TrustedEntityReference でオーバーライドする必要があるインターフェイスとインターフェイスは何ですか?.NET ディクショナリ オブジェクトで使用されているものに関して変更してはならない値、またはオブジェクトを孤立させるリスクがある値はどれですか? (たとえば、オブジェクトの発行されたハッシュコードを変更すると、辞書で GC の問題が発生する可能性があります)
これは、私が取り組んでいる現在のサンプル オブジェクトです。
c# - C# ジェネリック クラスと EqualityComparer
次のクラス宣言の何が問題なのか、誰か説明してもらえますか?
EqualityComparer を使用している行でコンパイラが不平を言っています。エラーは次のとおりです。
エラー CS0176: 静的メンバー `object.Equals(object, object)' はインスタンス参照ではアクセスできません。代わりに型名で修飾してください
インスタンス参照を使用している場所がわかりません。
すみません、私のせいです。不完全な質問を投稿しました。完全を期すために、 Identifier クラスは次のとおりです。
そこで EqualityComparer を使用したのは、コピー アンド ペーストのミスが原因でした (申し訳ありませんが、今日は一般的なコードが多すぎます)。
もちろん、私の質問は間違っていました。回答に必要なすべての要素を提供していなかったからです (すぐに削除します)。私はする必要IType
がありIConvertible
ました。とにかくみんなに感謝します。
c# - null 参照を引き起こしているこの Icomparer の矛盾はどこにありますか?
適用されているコレクションに null エントリがないにもかかわらず、カスタム IComparer 実装で null オブジェクトを受け取ります。私の理解では、これは IComparer 実装の不一致が原因である可能性があります。次のコードでは、これがどこで発生しているのかわかりません。
参考までに、これらは最初に「正しい」プロパティで並べ替えられ、同じ場合は「tiebreakerDelta」プロパティに基づいて並べ替えられます。
あなたが提供できるかもしれない助けをありがとう!
編集:これは真のヌル参照ではなく、矛盾が原因であると確信しています。また、時折、確認のためにこのエラー テキストが表示されます -
残念ながら、ブレークポイントはこれで役に立ちません。
編集:これは、ResultsLineViewModel が IFoolsSortable インターフェイスを実装する短い例です。
この場合の正しい並べ替えは、Line1、line3、line2、line4 です。
c# - リストを使用したアルゴリズムの高速化.Sort と IEnumerable
私のプロジェクトでは、まずファイルから画像を読み込み、すべてのピクセルを 2Dpixels[,]
配列に入れます。次に、各ピクセルを調べて、色に基づいて「ビン」に分割し、各ビンを並べ替えます。したがって、 aBin
をカプセル化するオブジェクトがあり、(比較的少数の) ビンを含む がありますList<Pixel>
。List<Bin>
私の問題は、非常に大きな画像 (1920x1200 = 230 万ピクセルなど) からこれらのビンを埋めようとすると、使用しているアルゴリズムが思ったよりも遅くなり、問題をいくつかの C# まで追跡したことです。私が予想していたよりも時間がかかっているように見える言語固有の機能。これらのボトルネックを解消するために C# をより適切に使用する方法についてアドバイスをお願いします。
画像を読み込んだ後、「fillBinsFromSource」という関数を呼び出します。この関数は、列挙可能なピクセルのリストを取得し、それらが属するビンを見つけてそこに配置します。
大きな画像の場合、私のアルゴリズムにはしばらく時間がかかることが予想されますが、ストップウォッチを関数呼び出しの外に置くと、で発生した時間の約 2 倍の時間がかかることがわかりましs
たforeach
。この関数の半分の時間 (1920x1200 画像の場合、1.6 秒のうち約 800 ミリ秒)。
列挙可能なリストを渡す必要がある理由は、ユーザーが画像全体ではなく、画像の小さな領域のみを追加する場合があるためです。時間のかかる呼び出しでは、最初に画像のリストから、次にリスト内の各画像から、次のように (簡略化して) 複数のイテレータを渡します。
それから最後に私はこれを呼び出します
質問 1) ピクセルの 2D 配列と選択した領域の両方を列挙する必要があるため、ユーザーが選択した内容に応じて、列挙は非常に遅くなります。どうすればこれをスピードアップできますか?
Pixel
次に、これらすべてのビンをオブジェクトで満たした後、それらを並べ替えます。次のように、を呼び出しList<Pixel>.Sort()
て依存しIComparable
ます。
問題 2) allBins
7 つの要素があるとします。合計 230 万Pixel
の s を持つ 7 つの個別のリストを並べ替えるには、約 2 秒かかります。230 万個の random の 1 つのリストを並べ替えるにint
は、200 ミリ秒未満かかります。プリミティブ型を使用するとある程度のスピードアップがあることは理解できますが、実際に使用すると 10 倍以上遅くなりますIComparable
か? ここで必要なスピードアップはありますか?
長い質問で申し訳ありませんが、何かアドバイスがあればよろしくお願いします。
c# - コレクションがソートされるときに、CompareToメソッドが何回呼び出されますか?
タイプが実装されIComparable<T>
ていて、100個の要素を持つこのタイプのコレクションがある場合。このコレクションでSortメソッドを呼び出すと、メソッドは何回CompareTo
呼び出され、どのように呼び出されますか?このように使用されますか?
編集:基本的に私がやろうとしているのは、この並べ替え方法を値ベースの並べ替えに変えて、各アイテムに値を割り当ててから並べ替えることです。説明するのは難しいですが、この問題に-1,0,1ベースのソート機能を使用することはできません。しかし、私が持っているのは、アイテムを並べ替えるために使用する必要があるCompareTo関数だけです。したがって、アイテムごとにいくつかの値を生成する必要があります。そうすると、プログラムはそれらを最小値から最大値に並べ替えます。