問題タブ [comparator]

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.

0 投票する
4 に答える
5325 参照

scala - Scala: Java のように PriorityQueue を使用する方法はありますか?

scala.collection.mutable.PriorityQueue で使用したいクラスがありますが、この 1 つの目的のためだけに Ordered[A] にしたくありません。PriorityQueue に関して使用したい順序を、クラスの自然な順序とは見なしません。

したがって、私の PriorityQueue では、値を「順序」で並べ替えたいと思います。ただし、2 つのオブジェクトが同じシーケンスを持っているからといって、それらの「値」の内容が異なる可能性があるため、それらが自然に等しくなるわけではありません。

ここで、Java では、別の Comparator オブジェクトを PriorityQueue に提供できると便利です。私の Comparator は、単に「シーケンス」に関してオブジェクトを並べ替え、それらの「値」を無視します。

PriorityQueue クラスは、「A <% Ordered[A]」でパラメータ化する必要があります

私が読んだことから、これは、私のクラスが Ordered[A] を拡張する必要があるか、Ordered[A] への「暗黙的な定義」型変換を提供する必要があることを意味します。

Java ソリューションはより「機能的」であるように思われ、クラス階層に強制的に参加させたり、クラスにモンキーパッチを適用したりする代わりに、Comparator 関数のようなオブジェクトを渡すことができます。

PrioirityQueue の使用に代わる方法があることは理解していますが、ここで Scala の学習曲線にぶつかりそうで、この設計上の決定を十分に検討せずにあきらめたくありません。

これは Scala ライブラリでの不幸な決定にすぎないのでしょうか、それとも PriorityQueue をより使いやすく「機能的」にする何らかの呼び出し規約を誤解しているのでしょうか?

ありがとう

0 投票する
2 に答える
1513 参照

java - Java:2つのベクトルを埋めて並べ替える

2つのベクトルを埋めて、それらを互いに組み合わせるにはどうすればよいですか(インデックスまたはクラスのオブジェクトタイプ)。インデックスを使用してそれらを組み合わせる場合は、Collections.sortで並べ替えを処理できます。それ以外の場合は、コンパレータを作成する必要があります。

Java1.4の規則に従ってコーディングする必要があります。

あなたの想像力をより簡単にするために; これは、並べ替えベクトル(行)とコンテンツベクトル(すべての列)を持つグリッドです。それらはベクトルに入力され、ソートされる必要があります。

コンテキスト:すべてのコンポーネントを奇妙な順序で含むGridBagLayoutがあります。すべてのコンポーネントを循環して、正しいグリッド順序(gridx、gridy)で入力する必要があります。その解決策のために、私は2つのベクトルについて考えました。1つは行を定義し、その列を含むベクトルを指します。ベクトルの入力中に並べ替えが解決されるか、2番目のステップで並べ替える必要があります。Java 4の場合、オブジェクトを含む2つのベクトル以外のアプローチはないと思いますよね?

0 投票する
8 に答える
2071 参照

java - 順序を動的に変更できるJavaコンパレータを使用しても大丈夫ですか?

ソートされたセットに配置したいタイムスタンプ付きの値のセットがあります。

このセットをソートするためのビジネスロジックでは、最新の値より7日以上古い場合を除き、値は値の降順で並べ替える必要があります。

そこで、テストとして、次のコードを思いつきました...

ご覧のとおり、最初は最初の値の方が2番目の値よりも関連性がありますが、最終的な値がセットに追加されると、最初の値の有効期限が切れ、関連性が最も低くなります。

私の最初のテストでは、これは機能するはずだと言っています...さらに値が追加されると、TreeSetはリスト全体を動的に並べ替えます。

でも、見ても信じられない。

並べ替えられたコレクションは、各要素が追加されるときにセット全体を並べ替えますか?ソートされたコレクションをこの方法(つまりパフォーマンス)で使用するための落とし穴はありますか?すべての値が追加された後、リストを手動で並べ替えた方がよいでしょうか(おそらくそうなると思います)。



フォローアップ: 多くの(そしてある程度は私でさえ)疑われるように、ソートされたコレクションはこの方法の「動的な並べ替え」をサポートしていません。私の最初のテストは、まったく偶然に「機能」していたと思います。セットに要素を追加すると、「順序」が急速に崩壊しました。すべての素晴らしい回答に感謝し、多くの人から提案されたアプローチを使用するようにコードをリファクタリングしました。

0 投票する
3 に答える
4586 参照

c++ - C++ std::set コンパレータ

これはコードです:

そして、これが問題です:

デバッグ アサーションに失敗しました!
ファイル: ..\VC\include\xtree
行: 638

式: 無効な演算子 <

その後、「中止」、「再試行」、または「無視」を選択できます。無視を選択すると、さらに多くの(同一のもの)が出てきますが、完全に機能します。

->Amount == で Reputation を以前に挿入された Reputation * の 1 つに挿入すると、問題が発生するようですが、この最後のものについてはわかりません。

どんな助けでも大歓迎です

編集:私がそれらを並べたい順序は、最初に昇順の正のもの、次に降順の負のものです。例: 1 5 10 11 11 20 50 -1 -5 -50

0 投票する
3 に答える
3570 参照

c++ - カスタム コンパレータを使用した std::list::sort のエラー (')' トークンの前にプライマリ式が必要です)

タイトルは主な質問です。正確なシナリオ (私は「名前空間 std を使用しています;」):

これは比較器の定義です:

コンパレータの実装は直感的で簡単です。std::set で非常によく似たコンパレータも使用していますが、正常に動作します。sortByOccurrence() 関数を追加すると、タイトルにエラーが表示されます。

私は何をすべきか?

編集: Substring::OccurrenceComparator() をコンパレータとして渡そうとしていますが、次のエラーが発生しています:

私のコード行は次のとおりです。

テンプレートを削除できないか、テンプレート パラメーターが間違っているというエラーが表示されます。

0 投票する
5 に答える
2534 参照

java - 二分探索のための複合オブジェクトの Comparator を書く

次のようなクラスとインスタンスのリストがあります (フィールド名は無実/独自のものを保護するために変更されています):

リストbloatListは によって内部的にBloatProducer保持され、新しいレコードのみを追加Bloatし、古いレコードを変更せず、各フィールドが単調に増加するように維持されます。たとえば、bloatProducer.testMonotonicity()常に が返されtrueます。

timeInMilliseconds、spaceInBytes、または costInPennies フィールドのいずれかでレコードCollections.binarySearch(list,key,comparator)を検索するために使用したいと思います。Bloat(そして、番号が2つのレコードの間にある場合、前のレコードを見つけたい)

これを機能させるために一連の 3 つの Comparator クラスを作成する最も簡単な方法は何ですか? 探していないものにダミー フィールドを持つ Bloat オブジェクトであるキーを使用する必要がありますか?

0 投票する
2 に答える
10975 参照

java - Junit インライン コンパレータの初期化エラー

java.util.Comparator を引数として取るコンストラクタを持つ SortedList クラスを作成しました。

私のマシンで(Eclipse 3.3.0まで)単体テストを実行した後、すべて問題ありませんでした。ただし、Hudson は、コンパレーターをインスタンス化できないと言っているため、不満を漏らしています。

ここに私の簡単なテスト(スニペット)があります

または別の方法:

ハドソンが示すエラーは

ar.com.lib.SortedListTest$strcmp.initializationError0

エラーメッセージ

テスト クラスには引数のない public コンストラクターが必要です

スタックトレース

java.lang.Exception: Test class should have public zero-argument constructor at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 原因投稿者: java.lang.NoSuchMethodException: ar.com.lib.SortedListTest$strcmp.() at java.lang.Class.getConstructor0(Class.java:2706) at java.lang.Class.getConstructor(Class.java:1657)

@Ignore アノテーションを使用してみましたが、今のところうまくいきません。試してみるとコンパイルされません

どんなアイデアでも大歓迎です。前もって感謝します。

0 投票する
5 に答える
13375 参照

java - とにかく、ヌルを一番下にソートする一般的な方法はありますか?

私はいくつかのカスタム Comparator を書いています。昇順または降順のどちらでソートしているかに関係なく、null アイテムをリストの一番下にプッシュしたいと思います。これにアプローチするための良い戦略またはパターンは何ですか?

オフハンド:

  • 可能な場合はコードを共有して、個別の昇順および降順のコンパレータを作成するだけです
  • NPE をスローするか、明示的に呼び出すことにより、null 処理を別のクラスに委譲します。
  • 昇順フラグを含め、その中に条件付きロジックを入れて、null をナビゲートします。
  • null 処理クラスで通常のコンパレータをラップする

他の戦略はありますか?さまざまなアプローチの経験や、さまざまな戦略の落とし穴について聞きたいです。

0 投票する
8 に答える
82021 参照

java - Javaでの自然順の文字列比較-組み込みのものですか?

自然順1を維持するような文字列比較関数が欲しいのですが。このようなJavaに組み込まれているものはありますか?Stringクラスには何も見つかりません。また、Comparatorクラスは2つの実装しか認識していません。

自分で転がすことはできますが(それほど難しい問題ではありません)、必要がなければ、車輪の再発明はしたくありません。

私の特定のケースでは、ソートしたいソフトウェアバージョン文字列があります。したがって、「1.2.10.5」は「1.2.9.1」よりも大きいと見なされるようにします。


1「自然」の並べ替え順序とは、プログラマーにのみ意味のある「ASCII-betical」の並べ替え順序とは対照的に、人間が文字列を比較する方法で文字列を比較することを意味します。つまり、「image9.jpg」は「image10.jpg」より小さく、「album1set2page9photo1.jpg」は「album1set2page10photo5.jpg」より小さく、「1.2.9.1」は「1.2.10.5」より小さくなります。

0 投票する
5 に答える
43326 参照

java - Java:SortedMap、TreeMap、Comparable?使い方?

いずれかのフィールドのプロパティに従って並べ替える必要のあるオブジェクトのリストがあります。これを行うには、SortedMapとComparatorsが最良の方法だと聞きました。

  1. 並べ替えるクラスとComparableを実装しますか、それとも新しいクラスを作成しますか?
  2. SortedMapをインスタンス化してComparatorに渡すにはどうすればよいですか?
  3. 並べ替えはどのように機能しますか?新しいオブジェクトが挿入されると、すべてが自動的に並べ替えられますか?

編集: このコードは私にエラーを与えています:

(Ktrは実装しますComparator<Ktr>)。Eclipseは、のようなものを期待していると言っているTreeMap<K, V>ので、私が提供しているパラメーターの数が正しくありません。