Tag: lambda

使用Lambda / Linq将对象列表sorting

我有一个string中的“按属性sorting”的名称。 我将需要使用Lambda / Linq来sorting对象列表。 例如: public class Employee { public string FirstName {set; get;} public string LastName {set; get;} public DateTime DOB {set; get;} } public void Sort(ref List<Employee> list, string sortBy, string sortDirection) { //Example data: //sortBy = "FirstName" //sortDirection = "ASC" or "DESC" if (sortBy == "FirstName") { list = list.OrderBy(x => x.FirstName).toList(); […]

在lambdaexpression式中使用foreach循环的iteratorvariables – 为什么失败?

考虑下面的代码: public class MyClass { public delegate string PrintHelloType(string greeting); public void Execute() { Type[] types = new Type[] { typeof(string), typeof(float), typeof(int)}; List<PrintHelloType> helloMethods = new List<PrintHelloType>(); foreach (var type in types) { var sayHello = new PrintHelloType(greeting => SayGreetingToType(type, greeting)); helloMethods.Add(sayHello); } foreach (var helloMethod in helloMethods) { Console.WriteLine(helloMethod("Hi")); } } public string […]

如何在LINQ lambda中的多个表之间执行连接

我正尝试在LINQ中的多个表之间执行联接 。 我有以下类: Product {Id, ProdName, ProdQty} Category {Id, CatName} ProductCategory{ProdId, CatId} //association table 我使用下面的代码(其中product , category和productcategory是上述类的实例): var query = product.Join(productcategory, p => p.Id, pc => pc.ProdID, (p, pc) => new {product = p, productcategory = pc}) .Join(category, ppc => ppc.productcategory.CatId, c => c.Id, (ppc, c) => new { productproductcategory = ppc, category = c}); […]

python max函数使用'key'和lambdaexpression式

我来自面向对象的背景,并试图学习python。 我正在使用max函数,它使用lambdaexpression式来返回列表players Player具有最大totalScore Playertypes的实例。 def winner(): w = max(players, key=lambda p: p.totalScore) 该函数正确地返回具有最大totalScore Playertypes的实例。 我对以下三件事感到困惑: max函数是如何工作的? 它正在采取什么论据? 我看了看文档,但是不明白。 max函数中关键字key用法是什么? 我知道它也用于sortfunction的上下文中 lambdaexpression式的含义? 如何阅读? 他们如何工作? 这些都是非常不好的概念性问题,但会帮助我理解语言。 如果你能举个例子来解释,这将有所帮助。 谢谢

为什么C ++ 0x的lambda需要“可变”关键字来进行按值捕获,默认情况下?

简短的例子: #include <iostream> int main() { int n; [&](){n = 10;}(); // OK [=]() mutable {n = 20;}(); // OK // [=](){n = 10;}(); // Error: a by-value capture cannot be modified in a non-mutable lambda std::cout << n << "\n"; // "10" } 问题:为什么我们需要mutable关键字? 与传统的parameter passing给命名函数完全不同。 背后的理由是什么? 我的印象是,按价值计算的全部重点是允许用户改变临时的 – 否则我几乎总是使用通过引用来获得更好的效果,不是吗? 任何启示? (我正在使用MSVC2010.AFAIK这应该是标准的)

列表<> OrderBy按字母顺序

我在Framework 3.5上使用C#。 我正在寻找快速sorting通用List<> 。 为了这个例子,我们可以说我有一个Persontypes的列表,其中包含一个lastname属性。 我将如何使用lambdaexpression式对此列表进行sorting? List<Person> people = PopulateList(); people.OrderBy(???? => ?????)

C ++ 11中的recursionlambda函数

我是C ++ 11的新手。 我正在写下面的recursionlambda函数,但它不能编译。 sum.cpp #include <iostream> #include <functional> auto term = [](int a)->int { return a*a; }; auto next = [](int a)->int { return ++a; }; auto sum = [term,next,&sum](int a, int b)mutable ->int { if(a>b) return 0; else return term(a) + sum(next(a),b); }; int main(){ std::cout<<sum(1,10)<<std::endl; return 0; } 编译错误: vimal @ linux-718q:〜/ […]

如何使用模板将lambda转换为std :: function

基本上,我想要能够做的就是带任意数量的任何types的参数的lambda,并将其转换为一个std ::函数。 我已经尝试了以下两种方法的工作。 std::function([](){});//Complains that std::function is missing template parameters template <typename T> void foo(function<T> f){} foo([](){});//Complains that it cannot find a matching candidate 下面的代码可以工作,但是这不是我想要的,因为它需要显式声明不适用于generics代码的模板参数。 std::function<void()>([](){}); 我一直在使用函数和模板整夜,我只是无法弄清楚,所以任何帮助将不胜感激。 正如在评论中提到的,我试图做到这一点的原因是因为我试图使用可变参数模板在C ++中实现柯里化。 不幸的是,这在使用lambda时会失败。 例如,我可以使用函数指针传递一个标准函数。 template <typename R, typename…A> void foo(R (*f)(A…)) {} void bar() {} int main() { foo(bar); } 但是,我不知道如何将lambda传递给这样一个可变参数的函数。 为什么我有兴趣将genericslambda转换成std :: function是因为我可以做到以下几点,但是最终它要求我明确地将模板参数声明为std :: function,这正是我想要避免的。 template <typename […]

何时使用lambda,何时使用Proc.new?

在Ruby 1.8中,proc / lambda和Proc.new之间有细微差别。 这些差异是什么? 你可以给如何决定哪一个select的指导方针? 在Ruby 1.9中,proc和lambda是不同的。 这是怎么回事?

在lambda中移动捕获

如何通过移动(也称为右值引用)在C ++ 11 lambda中捕获? 我想写这样的东西: std::unique_ptr<int> myPointer(new int); std::function<void(void)> = [std::move(myPointer)]{ (*myPointer) = 4; };