問題タブ [predicate]

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 に答える
3343 参照

c# - 機能しないおよび述語コンパイル後も同じ?

違いを確認するためにリフレクターを起動していませんが、Func<T, bool> vs .Predicate<T>

どちらもジェネリックパラメーターを取り、ブール値を返すので、違いはないと思いますか?

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

c# - ラムダ式で評価された値をキャッシュすることは可能ですか?

次のコードのContainsIngredientsメソッドで、p.Ingredients値を明示的に数回参照する代わりに、キャッシュすることはできますか?これは、説明のために作成した非常に簡単な例ですが、作業中のコードは、たとえば、 pの奥深くにある値を参照しています。p.InnerObject.ExpensiveMethod()。Value

編集: http://www.albahari.com/nutshell/predicatebuilder.htmlのPredicateBuilderを使用しています

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

c# - Predicate<> が封印されているのはなぜですか?

Predicate<IMyInterface> からクラスを派生させたかったのですが、Predicate<> が封印されているように見えます。私の場合、指定された関数の反転 (!) 結果を単純に返したいと考えていました。目標を達成するための他の方法があります。私の質問は、Predicate<> を封印することを決定したとき、MS の設計者は何を考えていたのでしょうか?

私が思いついたのは、あまり考えずに: (a) テストを単純化し、時間とコストのトレードオフだけです (b) Predicate<> から派生することで「ダメ」になる可能性があります

どう思いますか?

更新: 初期化フェーズ中に述語のリストに動的に追加される n 個の述語があります。それぞれが相互に排他的です (Abc が追加された場合、NotAbc は追加されません)。次のようなパターンを観察しました。

問題を解決できないのではなく、なぜ特定の方法で解決できなかったのか疑問に思っている.

0 投票する
6 に答える
68259 参照

c# - リスト内の何かを Find() するための適切な述語デリゲートを作成するにはどうすればよいですか?

MSDN を見た後、T のメンバー変数を使用して List で Find() メソッドを使用するための適切な述語をどのように形成する必要があるかはまだ不明です (T はクラスです)。

例えば:

「byYear」述語はどのように見えるべきですか?

(MSDN の例では、恐竜のリストについてのみ説明し、不変の値「saurus」のみを検索します。値を述語に渡す方法は示していません...)

編集: 私は VS2005/.NET2.0 を使用しているため、ラムダ表記は利用できないと思います...

EDIT2:異なる値に基づいてプログラムで「検索」したい場合があるため、例の「1999」を削除しました。for-do ループを使用して、例を 1980 年から 2000 年までの自動車の範囲に変更しました。

0 投票する
6 に答える
2602 参照

c++ - 順序付け述語の連鎖 (std::sort など)

関数ポインター、関数オブジェクト (またはブースト ラムダ) を std::sort に渡して、並べ替えたいコンテナーの要素の厳密な弱い順序付けを定義できます。

ただし、場合によっては (これを何度か実行したことがあります)、「プリミティブな」比較を連鎖させたい場合があります。

些細な例として、連絡先データを表すオブジェクトのコレクションを並べ替える場合があります。場合によっては、次のように並べ替えたいことがあります。

別の時に また別の時..など

これで、ケースごとに追加の関数オブジェクトを作成できますが、これは DRY の原則に違反します。特に各比較がさほど重要でない場合はなおさらです。

比較関数の階層を記述できるはずです-低レベルのものは単一のプリミティブな比較(たとえば、名<名)を実行し、次に高レベルのものは低レベルのものを連続して呼び出します(おそらく&& (短絡評価を利用する) を使用して複合関数を生成します。

このアプローチの問題点は、std::sort がバイナリ述語を取ることです。述語は bool のみを返すことができます。したがって、それらを構成している場合、「false」が等しいかより大きいかを示すことはできません。低レベルの述語が 3 つの状態を持つ int を返すようにすることができますが、それらを std::sort で単独で使用するには、高レベルの述語でそれらをラップする必要があります。

全体として、これらは克服できない問題ではありません。必要以上に難しいように思えます-そして確かにヘルパーライブラリの実装が必要です.

したがって、ここで役立つ既存のライブラリ (特に std または boost ライブラリの場合) を知っている人はいますか?

[アップデート]

いくつかのコメントで述べたように、私は先に進み、これを管理するクラスの独自の実装を作成しました。それはかなり最小限であり、おそらく一般的にいくつかの問題があります。しかし、それに基づいて、興味のある人のために、クラスはここにあります:

http://pastebin.com/f52a85e4f

また、いくつかのヘルパー関数 (テンプレート引数を指定する必要を避けるため) は次のとおりです。

http://pastebin.com/fa03d66e

0 投票する
1 に答える
6177 参照

vb.net - VB.NET述語配列検索

Array.Find を使用して、次を VB.NET 述語に変換するにはどうすればよいですか?

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

language-agnostic - 定数セットのテストを含む

問題文:

事前にわかっている整数のセットが与えられた場合、そのセットに単一の整数が含まれているかどうかをテストするコードを生成します。テスト関数の定義域は、連続した範囲内の整数です。


テスト対象の範囲やセットについては、特に何もわかっていません。範囲は小さくても大きくてもかまいません (ただし、ソリューションは大きすぎる問題を拒否できますが、上限が高い方が優れています)。許容範囲内の値のほとんどがセットに含まれていないか、ほとんどの値が含まれているか、またはその中間にある可能性があります。セットは、均一に分散されているか、クラスター化されている場合があります。含まれる/含まれない値のみの大きなセクションがある場合もあれば、ほとんどのスワスに各タイプの値が少なくともいくつかある場合もあります。(並べ替えアルゴリズムを分析するときに並べ替えられる項目について行われた仮定のようなもの)

目的は、テストを実行するための効果的なコードを生成する手順です。

頭に浮かぶ部分的な解決策には、

  • 完全ハッシュ関数 (大規模なセットではコストがかかる)
  • 範囲テスト:foreach(b in ranges) if(b.l <= v && v <= b.h) return true;
  • ツリー/インデックス (場合によっては他のものよりもコストがかかります)
  • テーブル ルックアップ (大規模なセットではコストがかかる)
  • これらのいずれかの逆 (kodos to Jason S )

理想的な解決策は、最適なオプションを選択するか、どれもうまくいかない場合は、ツリーを使用して全範囲をセクションに分割し、サブセクションの他のオプションに適したものに切り替えることができるようです。

役に立つかもしれないトピックは次のとおりです。


注: これは宿題ではありません。それが博士レベル以下の宿題として出された場合、教授はNerfガンで撃たれるべきです(それがわからない場合は、問題を読み直してください。それは非常に重要です)

注: これは数日おきに発生する問題で、ときどき頭を悩ませてきました。これを直接使用することはありませんが、攻撃するのはクールな問題だと思いました。私がコードを生成したい理由は、生成されたコードが一般的なコードよりも遅くなく (必要に応じて同じこともできます)、場合によっては高速になる可能性があるためです。

私の考えを明確にするために、この質問を投稿しています。合理的またはクールな解決策を思い付くことができれば、それらをテンプレート メタ プログラムとして実装する予定です (コードを生成するもう 1 つの理由)。

一部の人々は、問題が非常に一般的であると指摘しています。そこが肝心だ。私は非常に一般的なドメインで動作するシステムを生成したいと考えています: ある範囲の整数のセットです。

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

.net - LINQ の And 演算子の述語のエラーを解決するのに助けが必要です

述語 And 演算子の問題が発生しました。コードは次のとおりです。

エラーは次の行です: [ else {pred = pred.And(c => ] メソッド 'And' のオーバーロードはありません '1' 引数を取ります

述語に .And 演算子を使用する方法を教えてください。

前もって感謝します。
アニル

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

c# - 多くの多対多フィルター

今日、dear 述語によってさらに単純化された非常に単純な問題に直面しました。一種のイベント ログがあり、条件のリストを使用してクライアント側 (Windows フォーム) でフィルター処理したいと考えていました。いくつかのカテゴリでフィルタリングする実装から始めました。

次のステップは、他のいくつかのフィルターを実装することです。これらを一般化して、フィルターごとに 1 つのメソッドを作成する必要がないようにする良い方法を知っていますか? または、少なくとも、同時に適用したいフィルターの動的リストを作成するクリーンな方法です。

クライアントはまだフレームワーク 3.0 を使用しているため、LINQ はありません。

更新: 自分のソリューションの功績を認めるべき人物を決めるのに苦労しました。マークにはいくつかの素晴らしいアイデアがあり、それらを説明するのが本当に上手です。私の問題をもう少しうまく説明していれば、おそらく彼から答えが得られたでしょう。最終的に、私を軌道に乗せたのは、cmartin が提供した汎用 Filter クラスでした。以下で使用される Filter クラスは、cmartins の回答と、自分で思いつく User クラスにあります。

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

c# - 述語について学習するためのリソース

c# 2.0 言語機能の「述語」について学習するためのオンライン チュートリアルはありますか?

述語を linq to sql と共に使用してクエリを変更する方法を学ぼうとしています

私がやろうとしているのは、顧客のテーブルをクエリし、変化する基準に基づいてフィルタリングすることです。例えば

  • zipcode = 90210 を持つすべての顧客を見つける
  • 男性の顧客をすべて見つける
  • 男性でかつ > 郵便番号 = 90210 であるすべての顧客を検索します。

今、私はかなり間違っていると感じる if/else ステートメントを使用してこれを行っています

また、他のフィルターを追加する必要がある可能性があるため、この問題に対する柔軟な解決策が必要です。これは、何も壊さずに簡単に拡張できます (オープン クローズドの原則だと思います)。