这工作:
//delegate
Parallel.For(1023456789, 1033456789, delegate(long i)
{
if (i % 10000000 == 0) Console.WriteLine("{0:N0}", i);
if (IsPanDigital(i))
{
list.Add(i);
}
}
);
//lambda expression
Parallel.For(1023456789, 1033456789, i =>
{
if (i%10000000 == 0) Console.WriteLine("{0:N0}", i);
if (IsPanDigital(i))
{
list.Add(i);
}
}
);
Run Code Online (Sandbox Code Playgroud)
是否可以使用Func重写此逻辑?我在这里试过..不编译.
var list = new List<long>();
Parallel.For(1023456789, 1033456789, Blah(i, ref list));
public static Func<long> Blah(long i, ref List<long> list)
{
if (i % 10000000 == 0) Console.WriteLine("{0:N0}", i);
if (IsPanDigital(i))
{
list.Add(i);
}
}
Run Code Online (Sandbox Code Playgroud)
我试图看看它是否可以完成.
我偶然发现了以下网站:http : //www2.research.att.com/~bs/C++0xFAQ.html#lambda,他们在其中解释了lambda函数。我尝试使用提供的示例:
vector<int> indices( notImportantNumber );
int count = 0;
fill(indices.begin(), indices.end(), [&](){ return ++count; });
Run Code Online (Sandbox Code Playgroud)
同样
generate(indices.begin(), indices.end(), [&](){ return ++count; });
Run Code Online (Sandbox Code Playgroud)
虽然,当我尝试将示例与fill一起使用时,我继续遇到此错误:
错误1错误C2440:'=':无法从'const`anonymous-namespace'::'转换为'long'c:\ program files \ microsoft visual studio 10.0 \ vc \ include \ xutility 2692
有人知道为什么会这样吗?在的声明中std::fill(),没有函子作为最后一个参数。
我有一个对象列表,我想删除满足条件的所有对象.这是我的代码:
var listCurrentBuzzCompaigns = _buzzService.GetAllActiveCompaigns().ToList();
listCurrentBuzzCompaigns.ForEach(x => {
if (x.MayaMembership.MayaProfile.MayaProfileId == profile_id)
listCurrentBuzzCompaigns.Remove(x);
});
Run Code Online (Sandbox Code Playgroud)
但是一个广告系列被删除,下一个广告系列被删除,下一个广告系列被删除,下一个广告系列不被删除.代码有什么问题?
我有以下代码,它应该搜索数组并查看是否与第二个参数匹配.
def any(check: Set[Any], expr: Boolean): Boolean = {
var checked = check.filter(_ => expr)
if (checked == Set())
return false
else
return true
}
Run Code Online (Sandbox Code Playgroud)
它应该被称为这样:
any(Set(3, 4, 5, 6), _ > 5)
但是当我打电话给它时:
error: missing parameter type for expanded function ((x$1) => x$1.$greater(5))
Run Code Online (Sandbox Code Playgroud)
我对函数式语言和Scala的经验很少,所以,请给我一个彻底的解释,说明发生了什么以及如何解决它!
lambda functional-programming scala set scala-placeholder-syntax
我正在尝试在两个字符串数组上执行SQL MINUS的等效操作.这是我试图复制的代码:
string returnValue = "";
foreach (string eachWord in allWords)
{
foreach (string ignoreWord in ignoreWords)
{
if (eachWord != ignoreWord)
{
returnValue += eachWord;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想把它重写为:
returnValue = allWords.Minus(ignoreWords);
Run Code Online (Sandbox Code Playgroud)
或者同样简洁的东西.我意识到在幕后我最终会得到相同的代码,但我只是在迂腐!
在此代码中,x = [x for x in range(3)]全局x等于[0,1,2].
列表推导中的x是局部变量.
然后让我们来定义x = [lambda: x for x in range(3)],将x[0]()返回什么?0?2?
不,它将返回一个列表,全局x本身.
我想知道为什么内部x指的是全局x,而不是局部x?
如何检查是否array2是子集array1?换句话说,我要检查的所有元素是否array2存在于array1或不?我想要解决方案Lambda或Linq.
int[] array1 = {6, 3, 1, 4, 5, 2};
int[] array2 = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud) 我想写一个简单的验证方法,如FluentValidation
我写了这个简单的代码:
public static class ExtensionMethods<T> where T : class
{
public static bool Validate(Func<T, bool> expression)
{
//What I should write?????
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道我应该在方法体中写什么以及如何使用它.
编辑1:
我想为所有对象编写这样的代码:
ExtensionMethods<MyObject>.Validate(o=>o.ID == 1).AddMessage(....
Run Code Online (Sandbox Code Playgroud) 我有两个从数据库中获取的对象数组,有些重叠,所以我必须制作一个独特的函数.
我试图制作一个lambda表达式,但我仍然有一个重叠的对象.
这是我的代码:
ArtObject[] pinui = new ArtObject[root.Count - 1];
ArtObject[] c1= new ArtObject[root2.Count - 1];
pinui = getArticlesArray(root2, pinui);
c1= getArticlesArray(root, c1);
art = new ArtObject[c1.Count()+pinui.Count()];
pinui.CopyTo(art, 0);
c1.CopyTo(art, pinui.Count());
art = art.Distinct().OrderByDescending(a => a.dateTosort).ToArray();
Run Code Online (Sandbox Code Playgroud)
我觉得我的最后一行出了问题,art = art.Distinct().OrderByDescending(a => a.dateTosort).ToArray();我想知道什么,怎么才能得到不同的对象..?
据我所知,Python lambda只允许表达式,而不是语句.我有一个案例,我len()在lambda表达式中使用并尝试获取函数调用的返回值的长度.但是,该函数调用有可能返回None,这会中断len().这周围有优雅的方式吗?
例:
def foo(obj_list, field):
return maxk(obj_list, key=lambda obj: len(nested_getattr(obj, field)))
Run Code Online (Sandbox Code Playgroud)
在上面,maxk()是一个max()接受key参数的版本.我正在使用Python 2.4(并且目前不能使用更高的东西),所以我有一个自定义实现max(),需要一个关键参数,来自这里(参见帖子#140122和#140143). nested_getattr()是另一个实用程序函数,其行为类似getattr()但可以获取嵌套在另一个中的属性.这可以从这里获得.
示例函数的作用(这是我用变量/名称改变的实际函数)是通过一个对象列表(obj_list)并比较值的长度field并返回列表field中最大的对象.
但是,如果field为每个对象指定的属性返回None,len()则将使用a阻塞TypeError.我想我可以使用内联条件绕过它,但是我必须调用nested_getattr()两次,一次用于检查,如果返回值不是,则可能第二次None.我宁愿将其返回值缓存到变量并在决定返回什么之前在条件上运行它(或者只是让生成器表达式完全跳过它).
处理这个问题的好方法是什么?我对这个函数的其他实现是开放的maxk(),或者nested_getattr()(如果需要的话).