标签: predicate

如何链接接受Func <>委托的方法重载?(C#)

我有一个带有两个重载的方法,如下所示:

bool Evaluate(Func<bool> condition)
{
    // Some logic

    return condition.Invoke();
}

bool Evaluate<T>(Func<T, bool> condition, T value)
{
    // Same logic as the first method overload

    return condition.Invoke(value);
}
Run Code Online (Sandbox Code Playgroud)

由于两个方法重载都包含大致相同的逻辑,我希望将它们链接在一起,但我看不到如何做到这一点.我想第一个方法overoad需要构造一个委托,它传递给第二个重载,但是不清楚这个委托应采取什么形式.

非常感谢你的建议,

蒂姆

c# generics delegates predicate

1
推荐指数
1
解决办法
1241
查看次数

对财产的谓词

我有一个List<B>和一个类B有公共财产A.

如何过滤B使用的列表Predicate<A>

c# predicate list

1
推荐指数
1
解决办法
168
查看次数

检查NSString是否包含全部或部分字符

我有一个NSString query,其中包含~10个字符.

我想检查一下,调用的第二个NSString是否word包含所有字符query或某些字符,但没有其他未指定的字符query.

此外,如果查询中只出现一个字符,则该字中只能出现一个字符.

请问你能告诉我怎么做吗?

NSString *query = @"ABCDEFJAKSUSHFKLAFIE";
NSString *word  = @"fearing"; //would pass as NO as there is no 'n' in the query var.  
Run Code Online (Sandbox Code Playgroud)

comparison predicate objective-c nsstring ios

1
推荐指数
1
解决办法
1282
查看次数

为什么 EntityFramework 不使用我的谓词?

我有一个 PredicateBuilder,它是从http://www.albahari.com/nutshell/predicatebuilder.aspx得到的

这是我如何使用它:

var Expression = PredicateBuilder.True<UCM_UserAgent>();
Expression = Expression.And(item => item.AgentText == "TestUserAgent Value");

Func<UCM_UserAgent, bool> SearchCriteria = Expression.Compile();
var Data = Context.UCM_UserAgent
                                    .Where(SearchCriteria)
                                    .ToList();
Run Code Online (Sandbox Code Playgroud)

当我在我的数据库上检查 SQL Profiler 时:

SELECT 
[Extent1].[Id] AS [Id], 
[Extent1].[AgentText] AS [AgentText], 
FROM [dbo].[UCM_UserAgent] AS [Extent1]
Run Code Online (Sandbox Code Playgroud)

现在,我添加的条件在哪里?我无法解决这个问题。不幸的是,这个Entity Framework 和 Predicate Builder - Predicates are Ignored in SQL Query也没有帮助。

编辑:消除任何误解;我不想使用 x => x.AgentText = "SomeText"。因为我想构建一个动态的 LINQ 查询,所以我使用了 PredicateBuilder。

linq entity-framework predicate

1
推荐指数
1
解决办法
181
查看次数

为什么用于创建谓词的函数应该定义为静态?

在阅读Java 8中引入的新功能的同时,我发现了Predicates的概念.我注意到互联网和书籍中提供的大多数示例都使用静态函数来创建谓词.

以下面的Apple类为例:

public class Apple {

    private String color;
    private int weight;

    private static final int SMALL_APPLE_MAX_WEIGHT = 150;

    public Apple(String color, int weight) {
        this.color = color;
        this.weight = weight;
    }

    public static boolean isGreenApple(Apple apple) {
        return null!=apple && null!=apple.getColor() && "green".equals(apple.getColor());
    }

    public boolean isBigApple() {
        return this.getWeight() > SMALL_APPLE_MAX_WEIGHT;
    }
}
Run Code Online (Sandbox Code Playgroud)

我现在可以创建一个新的谓词如下:

Predicate<Apple> isGreenApple = Apple::isGreenApple;
Predicate<Apple> isBigApple = Apple::isBigApple;
Run Code Online (Sandbox Code Playgroud)

如上所示,我可以使用静态和实例方法创建谓词.哪种方法是首选方法,为什么?

predicate java-8

1
推荐指数
1
解决办法
2201
查看次数

R 检查 TRUE/FALSE 值列表是否评估为 TRUE

我对 R 比较陌生,如果这是基础知识,我很抱歉。我有这个循环,里面有一个条件,可以在 2 个列表之间进行比较,并返回一个 TRUE/FALSE 值向量。我真正需要检查的是这个向量是否只包含 TRUE 值(意味着 2 个列表是相同的)

for ( i in 1:(length(sessions_items_list)-1)){
  if (sessions_items_list[[i]]==sessions_items_list[[i+1]]){
    identical_sessions_df [i,1] <- names(sessions_items_list[i])
    identical_sessions_df [i,2] <- names(sessions_items_list[i+1])
    #identical_sessions_df [i,3] <- sessions_items_list[[i]]
    #identical_sessions_df [i,4] <- sessions_items_list[[i+1]]
  }
}
Run Code Online (Sandbox Code Playgroud)

这是一些数据:

> sessions_items_list[[2]]
 [1] "111502665618" "111505397996" "121238758674" "121480200508" "131159477858" "161469302097" "161474935929" "171526802604" "231197187139" "231381216285" "251502101205" "261650031415"
[13] "261652085962" "261652452940" "271538491767" "281398254987" "291227243345" "311065441334" "321561638226" "321566237993" "331042848072" "331251405185" "331366646532" "361096154736"
[25] "381043841996"
> sessions_items_list[[3]]
 [1] "111502665618" "111505397996" "121238758674" "131159477858" "161469302097" "161474935929" "171526802604" "231197187139" "231381216285" "251502101205" …
Run Code Online (Sandbox Code Playgroud)

r predicate list vector

1
推荐指数
1
解决办法
9359
查看次数

以边界限制器为元素的子列表

我有一个像这样的列表的基本谓词:

sublist(List, Offset, Length, Sublist)


sublist(List, Offset, Length, Sublist):-
    length(Prefix, Offset),
    append(Prefix, Rest, List),
    length(Sublist, Length),
    append(Sublist, _, Rest).
Run Code Online (Sandbox Code Playgroud)

它从给定长度的初始列表中的第一个元素返回一个子列表.

6 ?- sublist([a,b,c,d,e,f,g,h,i,j,k], 3, 6, X).
X = [d, e, f, g, h, i].
Run Code Online (Sandbox Code Playgroud)

我想用一个下限和上限来转换这个谓词,它直接是原始列表的元素,就像这样

sublist([a,b,c,d,e,f,g,h,i,j,k], d, i, X).
X = [d, e, f, g, h, i].
Run Code Online (Sandbox Code Playgroud)

这该怎么做?

predicate list prolog dcg

1
推荐指数
1
解决办法
96
查看次数

为什么我的谓词被解释为布尔值?(Haskell的)

我试图在对列表上使用find函数,我想找到第一个元素等于x的第一对,所以我写道:

find (x == fst) list
Run Code Online (Sandbox Code Playgroud)

由于fst函数缺少一个参数,我认为(x == fst)是一个接受元组并返回布尔值的函数,但编译器将其解释为布尔值,就好像fst是一个变量一样.也许fst被解释为一种功能?但这不是要求它被()包围吗?

我确实使用列表理解来解决问题,但我仍然很好奇如何使用find来解决它.

haskell compiler-errors predicate find

1
推荐指数
1
解决办法
108
查看次数

Lisp案例具有不同的等式谓词

作为Tic Tac Toe玩机器人的一部分,我需要一个功能来评估瓷砖与点的组合.代码看起来像这样:

(case combination
    ("EEEEE" 0)
    ("EEEEP" 1)
    ("EEEPE" 1)
    ("EEEPP" 2)
    ("EEPEE" 1)
    ("EEPEP" 2)
    ("EEPPE" 2)
    ("EEPPP" 3)
    ("EPEEE" 1)
    ("EPEEP" 2)
    ("EPEPE" 2)
    ("EPEPP" 3)
    ("EPPEE" 2)
    ("EPPEP" 3)
    ("EPPPE" 3)
    ("EPPPP" 4)
    ("PEEEE" 1)
    ("PEEEP" 2)
    ("PEEPE" 2)
    ("PEEPP" 3)
    ("PEPEE" 2)
    ("PEPEP" 3)
    ("PEPPE" 3)
    ("PEPPP" 4)
    ("PPEEE" 2)
    ("PPEEP" 3)
    ("PPEPE" 3)
    ("PPEPP" 4)
    ("PPPEE" 3)
    ("PPPEP" 4)
    ("PPPPE" 4)
    ("PPPPP" 5))
Run Code Online (Sandbox Code Playgroud)

(这不是讨论这种方法的价值的地方,因为它被用于与问题无关的原因)

问题是case使用的谓词对于不是同一个对象的相同字符串不返回true(如果是eq或eql则很难找到).你怎么能改变它?

编辑:我通过将字符串转换为相应的二进制数来解决原始问题,可以使用eql进行比较或用作列表中的索引.

equality predicate common-lisp

1
推荐指数
1
解决办法
136
查看次数

来自 listp 的意外结果

我有一个结构蜘蛛:

(defstruct spider omegas values k)
Run Code Online (Sandbox Code Playgroud)

和一个实例蜘蛛

(set '*spider* (make-spider
  :omegas '()
  :values (list *input*)
  :k '(#'omegashift #'dec #'dupval '((0 . #'dec) (1 . #'inc) (2 . #'dec)))))
Run Code Online (Sandbox Code Playgroud)

但是当我运行表达式时:(listp (car (spider-k *spider*))在 Emacs 和 SBCL 上(并且涉及 SLIME,但我不确定它是什么。)REPL 返回T. 这显然令人困惑,因为(car (spider-k *spider*)正确返回#'OMEGASHIFT(listp (function OMEGASHIFT))正确返回NIL

为什么是(listp (car (spider-k *spider*))真的?不应该是假的吗?

lisp predicate common-lisp

1
推荐指数
1
解决办法
40
查看次数