问题标签 [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> 与其他代码时会期望看到完全相同的编译代码。Predicate<T>

我想两者都采用泛型参数并返回布尔值没有区别?

0 投票
5 回答
4194 浏览

c# - 是否可以缓存在 lambda 表达式中评估的值?

在以下代码的 ContainsIngredients 方法中,是否可以缓存p.Ingredients值而不是多次显式引用它?这是一个相当简单的例子,我只是为了说明目的而编写的,但我正在处理的代码引用了p内部的值,例如。p.InnerObject.ExpensiveMethod().Value

编辑:我正在使用来自http://www.albahari.com/nutshell/predicatebuilder.html的 PredicateBuilder

0 投票
3 回答
781 浏览

c# - 为什么 Predicate<> 是密封的?

我想从 Predicate<IMyInterface> 派生一个类,但它看起来好像 Predicate<> 是密封的。就我而言,我想简单地返回指定函数的反转(!)结果。我还有其他方法可以实现目标。我的问题是 MS 设计者在决定密封 Predicate<> 时可能在想什么?

没有太多考虑,我想出了:(a)简化了他们的测试,只是时间与成本的权衡(b)“不好”可能来自 Predicate<>

你怎么看?

更新:有 n 个谓词在初始化阶段动态添加到谓词列表中。每个都是互斥的(如果添加 Abc,则不会添加 NotAbc)。我观察到一个看起来像这样的模式:

不是我不能解决问题,而是我想知道为什么我不能以某种方式解决它。

0 投票
6 回答
68259 浏览

c# - 如何在我的列表中形成一个好的谓词委托来查找()某些东西?

在查看 MSDN 之后,我仍然不清楚我应该如何使用 T 的成员变量(其中 T 是一个类)在 List 中使用 Find() 方法形成一个正确的谓词

例如:

我的“byYear”谓词应该是什么样的?

(MSDN 示例只讨论恐龙列表,只搜索不变的值“saurus”——它没有显示如何将值传递到谓词中......)

编辑:我正在使用 VS2005/.NET2.0,所以我认为 Lambda 符号对我不可用......

EDIT2:在示例中删除了“1999”,因为我可能想根据不同的值以编程方式“查找”。示例更改为使用 for-do 循环从 1980 年到 2000 年的汽车范围。

0 投票
6 回答
2602 浏览

c++ - 排序谓词的链接(例如,对于 std::sort)

您可以将函数指针、函数对象(或 boost lambda)传递给 std::sort 以定义要排序的容器元素的严格弱排序。

但是,有时(我已经打了好几次了),您希望能够链接“原始”比较。

一个简单的例子是,如果您正在对代表联系人数据的对象集合进行排序。有时你会想要排序

其他时间 还有其他时候.. ETC

现在,您当然可以为每种情况编写一个额外的函数对象,但这违反了 DRY 原则——尤其是在每次比较不那么微不足道的情况下。

似乎您应该能够编写比较函数的层次结构 - 低级函数进行单一的、原始的比较(例如名字<名字),然后更高级别的函数连续调用低级函数(可能与&& 利用短路评估)来生成复合函数。

这种方法的问题在于 std::sort 采用二元谓词——谓词只能返回一个布尔值。因此,如果您正在编写它们,则无法判断“false”是否表示相等或大于。您可以使较低级别的谓词返回一个具有三种状态的 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;
  • 树/索引(在某些情况下比其他更昂贵)
  • 表查找(大集合成本高)
  • 这些中的任何一个的倒数(杰森 S的科多斯)

似乎一个理想的解决方案能够选择最好的选项,或者如果没有一个效果很好,使用树将整个范围分解为部分,然后切换到更适合它们的其他子部分选项。

可能有用的主题包括:


注意:这不是家庭作业。如果它是作为低于博士水平的家庭作业发布的,教授应该用 Nerf 枪射击(如果你没有得到那个然后重新阅读问题,这非常重要)

注意:这是我几天前遇到的一个问题,我一直在困惑。我对此没有直接用途,但认为这将是一个很酷的攻击问题。我想要生成代码的原因是因为生成的代码不会比一般代码慢(如果需要,它可以是同一件事)并且在某些/许多情况下可能会更快。

我发布这个问题是为了澄清我的想法。如果我能想出任何合理或酷的解决方案,我计划将它们实现为模板元程序(生成代码的另一个原因)

有些人注意到这个问题非常普遍。这就是我想说的。我希望生成一个可以在一个非常普遍的领域工作的系统:某个范围内的整数集。

0 投票
2 回答
687 浏览

.net - 需要帮助解决 LINQ 中 And 运算符的谓词错误

我遇到了谓词 And 运算符的问题。代码是:

错误是行:[ else {pred = pred.And(c => ] 方法 'And' 没有重载需要 '1' 参数

谁能告诉我如何使用 .And 运算符进行谓词。

提前致谢。
阿尼尔

0 投票
2 回答
402 浏览

c# - 多对多过滤器

今天我们遇到了一个非常简单的问题,而亲爱的谓词使这个问题变得更加简单。我们有一种事件日志,并希望使用标准列表过滤它的客户端(Windows 窗体)。我们首先实现了按多个类别进行过滤。

下一步是实现几个其他过滤器。您是否知道一种将这些概括为可能不必为每个过滤器编写一个方法的好方法?或者至少是一种干净的方式来获得我们想要同时应用的过滤器的动态列表。

客户端仍在框架 3.0 上,因此没有 LINQ。

更新: 我很难决定我的解决方案应该归功于谁。Marc 有一些不错的想法,并且非常擅长解释它们。如果我能更好地解释我的问题,我很可能会从他那里得到答案。最终,是 cmartin 提供的通用 Filter 类让我走上了正轨。下面使用的过滤器类可以在 cmartins 的答案和您自己梦想的用户类中找到。

0 投票
2 回答
253 浏览

c# - 学习谓词的资源

有没有什么好的在线教程来学习 c# 2.0 语言特性“谓词”?

我正在尝试学习如何使用谓词以及 linq to sql 来修改我的查询

我想做的是查询客户表并根据不断变化的标准对其进行过滤。例如

  • 查找所有邮政编码 = 90210 的客户
  • 查找所有男性客户
  • 查找所有男性且 > 邮政编码 = 90210 的客户

现在我正在使用 if/else 语句来做这件事,感觉很不对劲

另外,我可能必须添加其他过滤器,所以我想要一个灵活的解决方案来解决这个问题,它很容易扩展而不会破坏任何东西(我认为开放封闭原则)