問題タブ [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.
asp.net - CompareTo() を使用して複数の列に基づいて並べ替える
現在、IComparable インターフェイス (ASP.NET 3.5、VB) を実装するオブジェクトがあります。いくつかのインスタンス化されたオブジェクトを Generics リストに配置するときは、単純なsomeList.Sort
. 私のCompareTo()
機能はこれです:
これは正常に機能しますが、Point のサブセットとして DateSubmitted プロパティという別のプロパティで並べ替える必要がある場合を除きます。たとえば、3 つのセンテンスに投票がある場合: 3、1、1 の場合、(明らかに) 最も投票数の多いセンテンスを最初に表示し、1 票の 2 つのセンテンスのうち、最初に送信されたセンテンスをリストに表示します。
これは CompareTo() で可能ですか、それともデータベースに再度アクセスしてソートする必要がありますか?
ありがとう
c# - IComparableとIComparableを混合/修正する方法混乱
基本的に2つのオブジェクトでCompareToを呼び出すヘルパー関数がありますが、特別なコーナーケースのチェック、変換などを行います。
もともと私はそのように関数を書きました:
しかし、問題は、私が持っている場合ですclass AwesomeClass : IComparable<AwesomeClass>
。実際、いくつかの古いIComparable
クラスがなくなったので、私はいくつか持っていIComparable<T>
ます。しかし、コンパイラはこれらの新しいオブジェクトをに変換できないため、怒りますIComparable
。これが悪化するかどうかはわかりませんが、そのうちのいくつかは悪化していますabstract
(抽象クラスは実装を提供しますが)。
「CompareToを呼び出すことができる2つのオブジェクトが必要」を伝え、コンパイラにリップを与えないようにするにはどうすればよいですか。できれば、新しい関数はのようBetterCompare<AwesomeClass>(this, that, out retCode);
に見えるのではなく、単に「正しいことをする」必要があります。または、すべてのクラスに触れずにこれを行うためのより良い方法はあります IComparable
かIComparable<T>
?
c# - List.Contains 動作の変更
を持ってList<MyObj>
いclass MyObj : IComparable
ます。インターフェイスごとCompareTo
にMyObj
クラスにメソッドを書きましたが、 を使用すると、本来あるべきときに返されます。IComparable
List<MyObj>.Contains(myObjInstance)
false
true
then関数List
を呼び出すときにカスタム比較メソッドを使用することを確認するためにどのように進める必要があるかを理解しているかどうかはわかりません。Contains
これが私のcompareTo実装です:
Symbol プロパティは文字列であることに注意してください。
明確にするために、そのcompareToメソッドに停止点を入れましたが、そこには入りません。
誰もそれを試したことがありますか?
ありがとう。
c# - IComparable だけを取る SortedList
IScriptItem
を実装するインターフェースがありますIComparable<IQueueItem>
。IComparable
私の目には、何かを分類するためにはアイテムがあれば十分に思えます。しかし、私が見つけることができるのは、実際にはSortedTreesであるDictionaries、Hashtables、およびSortedListsだけです。
私が探しているのは、IComparables を使用する並べ替えられたジェネリック リストです。私は間違った場所を探していますか?
c# - 並べ替えとIComparableの問題
ArrayList
カスタムアイテムを並べ替えて、「少なくとも1つのオブジェクトがIComparableを実装する必要があります」を取得しようとしています。IComparable
それらのインターフェースを実装したにもかかわらず。私は単にデフォルトSort()
のパラメータなしと呼んでいます。並べ替えようとしているオブジェクトの定義は次のとおりです。
このコードは問題なくビルドされます。もう1つ覚えておくべきことがあります。方法はわかりませんが、これが問題になる可能性があると思います。上記のクラスは内部クラスです。それが私をつまずかせているのであれば、どのようにして内部クラスを比較しますか?
.net - Comparer.Compare には、IComparable を実装するオブジェクトが 1 つ必要ですが、最初のパラメーターがない場合は例外がスローされます。
Comparer クラスの Compare 関数のドキュメントには、次のように書かれています。
a が IComparable を実装している場合、a. CompareTo (b) が返されます。それ以外の場合、b が IComparable を実装している場合は、b の否定された結果。CompareTo (a) が返されます。
しかし、私がそれをテストすると、最初の入力が Icomparable を実装することを要求するように見えます。次のコードではエラーが発生します。
それは私だけですか、それともドキュメントが間違っていますか?
.net-3.5 - .NET 3.5 - IComparable を実装していないオブジェクト?
プロジェクト (IComparable のテンプレート メソッドが数回使用された) を VS 2005 から VS 2008 に変換すると、いくつかのエラーが発生しました。
これは、System.Object がそのインターフェイスを実装しなくなった、または変換中に何か問題が発生したという実際の事実ですか? これをどうにか修正できますか?
問題は次の方法にあります。
そして、次のような単純なものでも:
上記のエラーが発生します。VS 2005 では完全に機能していましたが、現在何が問題になっているのでしょうか?
c# - C#:端点がnull(無限大)の場合の範囲の交差
わかりました。範囲を操作するためのこれらの交差メソッドがあり、範囲の端点がnullでない限り、これらは正常に機能します。
今の私の問題は、彼らにまさにそのヌルエンドポイントをサポートしてもらいたいということです。nullエンドポイントは、範囲がその方向に無限大になることを意味します。合格したい、合格しない2つのテストは、たとえば次のとおりです。
すぐに機能しない理由は、nullがすべてよりも少ないと見なされるためです。しかし、ここでnullは、すべてよりも大きいと見なされる場合があります。
これをどのようにうまく解決できるか考えてみませんか?
最初にチェックしnull
て何か特別なことをするか、ある種のIComparer<T>
ラッパーを作成する必要があると思います...しかし、それらがどのように、またはどのように機能する必要があるかを理解することはできません。どんな種類の比較器も与えることができることを覚えておく必要があります。したがって、技術的には、与えられた比較器がそれを考慮に入れている限り、範囲は反対方向になる可能性があります(実際のコードでは、開始が来ると例外をスローします与えられた比較者によると終了後)。とにかく、私はここで少し迷っています:P
c# - IEquatableである必要があります、IComparable封印されていないクラスに実装されますか?
誰かがそれを要求するかどうか、または一般的に要求すべきかどうかについて意見がありますかIEquatable<T>
(それが)?IComparable<T>
T
sealed
class
この質問は、不変クラスの実装を支援することを目的とした一連の基本クラスを作成しているときに発生しました。基本クラスが提供することを目的とした機能の一部は、同等性比較の自動実装です(同等性比較を制御するためにフィールドに適用できる属性とともにクラスのフィールドを使用します)。終了したらかなりいいはずです。式ツリーを使用して、それぞれのコンパイル済み比較関数を動的に作成しているT
ので、比較関数は通常の等式比較関数のパフォーマンスに非常に近いはずです。(キー入力された不変の辞書System.Type
とダブルチェックロックを使用して、生成された比較関数を適度にパフォーマンスの高い方法で保存しています)
ただし、発生したことの1つは、メンバーフィールドの同等性をチェックするために使用する関数です。私の最初の意図は、各メンバーフィールドのタイプ(これを呼び出しますX
)が実装されているかどうかを確認することでしたIEquatable<X>
。X
しかし、少し考えてみると、そうでない限り、これは安全に使用できるとは思いませんsealed
。その理由は、そうX
でない場合、の仮想メソッドに等価性チェックを適切に委任sealed
しているかどうかがわかりません。これにより、サブタイプが等価性の比較をオーバーライドできるようになります。X
X
次に、これにより、より一般的な質問が発生します。型が封印されていない場合、これらのインターフェイスを実際に実装する必要がありますか?X
インターフェイスコントラクトは2つのタイプを比較することであり、そうでない場合もある2つのタイプを比較することではないと主張するので、私はそうは思わないでしょうX
(もちろん、X
またはサブタイプである必要があります)。
皆さんはどう思いますか?封印されていないクラスでは避けるべきIEquatable<T>
であり、避けるべきですか?IComparable<T>
(また、これにfxcopルールがあるかどうか疑問に思います)
私の現在の考えは、生成された比較関数をであるメンバーフィールドでのみ使用しIEquatable<T>
、代わりに、フィールドがのサブタイプを格納する可能性があり、のほとんどの実装が継承用に適切に設計されているとは思えないため、実装されている場合でも、仮想ifが封印されていない場合に使用することです。 。T
sealed
Object.Equals(Object obj)
T
T
IEquatable<T>
T
IEquatable<T>