Questions tagged «lambda»

不要使用AWS服务(对于这些问题,请使用[aws-lambda]!)Lambda是匿名函数或编程语言(例如Lisp,C#,C ++,Lua,Python,Ruby,JavaScript或Java)中的闭包。(也就是lambda表达式。)

4
C#在foreach中重用变量是否有原因?
在C#中使用lambda表达式或匿名方法时,我们必须警惕对修改后的闭包陷阱的访问。例如: foreach (var s in strings) { query = query.Where(i => i.Prop == s); // access to modified closure ... } 由于修改了闭包,因此上述代码将导致Where查询中的所有子句都基于的最终值s。 正如解释在这里,这是因为该s变量在声明foreach环以上的编译器编译如下: string s; while (enumerator.MoveNext()) { s = enumerator.Current; ... } 而不是像这样: while (enumerator.MoveNext()) { string s; s = enumerator.Current; ... } 如此处所指出的,在循环外声明变量没有任何性能优势,在正常情况下,我能想到的唯一原因是如果您打算在循环范围外使用变量: string s; while (enumerator.MoveNext()) { …



21
Java 8 List <V>到Map <K,V>
我想使用Java 8的流和lambda将对象列表转换为Map。 这就是我在Java 7及以下版本中编写它的方式。 private Map&lt;String, Choice&gt; nameMap(List&lt;Choice&gt; choices) { final Map&lt;String, Choice&gt; hashMap = new HashMap&lt;&gt;(); for (final Choice choice : choices) { hashMap.put(choice.getName(), choice); } return hashMap; } 我可以使用Java 8和Guava轻松完成此操作,但我想知道如何在没有Guava的情况下执行此操作。 在番石榴: private Map&lt;String, Choice&gt; nameMap(List&lt;Choice&gt; choices) { return Maps.uniqueIndex(choices, new Function&lt;Choice, String&gt;() { @Override public String apply(final Choice …

26
为什么Python Lambda有用?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 我正在尝试找出Python lambda。lambda是在现实生活中应该被遗忘的那些“有趣”语言项目之一吗? 我确定在某些情况下可能需要使用它,但是鉴于它的晦涩之处,在将来的版本中重新定义了它的潜力(根据各种定义我的假设)以及降低的编码清晰度-是否应该被避免? 这让我想起了C类型的溢出(缓冲区溢出)-指向顶部变量,并通过重载来设置其他字段值。感觉像是技术娴熟的演艺风格,但却是维护编码员的噩梦。

14
列表理解与lambda +过滤器
我碰巧发现自己有一个基本的过滤需求:我有一个列表,并且必须按项目的属性对其进行过滤。 我的代码如下所示: my_list = [x for x in my_list if x.attribute == value] 但是后来我想,这样写会更好吗? my_list = filter(lambda x: x.attribute == value, my_list) 它更具可读性,并且如果需要性能,可以将lambda取出以获取收益。 问题是:使用第二种方法是否有警告?有任何性能差异吗?我是否完全想念Pythonic Way™,应该以另一种方式来做到这一点(例如,使用itemgetter而不是lambda)吗?


18
与lambda不同()?
是的,所以我有一个不可估量的并希望从中获得独特的价值。 使用System.Linq,当然有一个扩展方法称为Distinct。在简单的情况下,可以不使用任何参数,例如: var distinctValues = myStringList.Distinct(); 很好,但是如果我有一个需要枚举的对象枚举,则唯一可用的重载是: var distinctValues = myCustomerList.Distinct(someEqualityComparer); 相等比较器参数必须是的实例IEqualityComparer&lt;T&gt;。我当然可以做到这一点,但这有点冗长,而且很笨拙。 我本来希望是一个过载,它需要一个lambda,例如Func &lt;T,T,bool&gt;: var distinctValues = myCustomerList.Distinct((c1, c2) =&gt; c1.CustomerId == c2.CustomerId); 任何人都知道是否存在这样的扩展名或等效的解决方法?还是我错过了什么? 另外,有没有一种方法可以指定内联IEqualityComparer(使我感到尴尬)? 更新资料 我发现Anders Hejlsberg对MSDN论坛中有关此主题的帖子进行了回复。他说: 您将遇到的问题是,当两个对象比较相等时,它们必须具有相同的GetHashCode返回值(否则Distinct内部使用的哈希表将无法正常运行)。我们使用IEqualityComparer,因为它会将Equals和GetHashCode的兼容实现打包到单个接口中。 我想这是有道理的。


16
获取实现接口的所有类型
使用反射,如何以最少的代码获得使用C#3.0 / .NET 3.5实现接口的所有类型,并最大程度地减少迭代次数? 这是我要重写的内容: foreach (Type t in this.GetType().Assembly.GetTypes()) if (t is IMyInterface) ; //do stuff

21
从Lambda表达式中检索属性名称
通过lambda表达式传递时,是否有更好的方法来获取属性名称?这是我目前拥有的。 例如。 GetSortingInfo&lt;User&gt;(u =&gt; u.UserId); 仅当属性为字符串时,才将其强制转换为memberexpression。因为并非所有属性都是字符串,所以我不得不使用object,但是它将为这些返回unaryexpression。 public static RouteValueDictionary GetInfo&lt;T&gt;(this HtmlHelper html, Expression&lt;Func&lt;T, object&gt;&gt; action) where T : class { var expression = GetMemberInfo(action); string name = expression.Member.Name; return GetInfo(html, name); } private static MemberExpression GetMemberInfo(Expression method) { LambdaExpression lambda = method as LambdaExpression; if (lambda == null) throw new …

22
查找列表的平均值
我必须在Python中找到列表的平均值。到目前为止,这是我的代码 l = [15, 18, 2, 36, 12, 78, 5, 6, 9] print reduce(lambda x, y: x + y, l) 我已经知道了,所以它可以将列表中的值加在一起,但是我不知道如何将其划分为它们?
473 python  list  lambda  average  reduce 

25
抛出异常的Java 8 Lambda函数?
我知道如何创建对具有String参数的方法的引用,并返回int,它是: Function&lt;String, Integer&gt; 但是,如果该函数引发异常,则将其定义为: Integer myMethod(String s) throws IOException 我将如何定义此参考?
469 java  lambda  java-8 

9
与LINQ和Lambda一起/在哪里
我遇到了用LINQ和Lambda编写的查询的麻烦。到目前为止,我的代码很多: int id = 1; var query = database.Posts.Join(database.Post_Metas, post =&gt; database.Posts.Where(x =&gt; x.ID == id), meta =&gt; database.Post_Metas.Where(x =&gt; x.Post_ID == id), (post, meta) =&gt; new { Post = post, Meta = meta }); 我是使用LINQ的新手,所以不确定此查询是否正确。
457 c#  linq  join  lambda 

14
从Java 8中的java.util.stream.Stream检索列表
我在玩Java 8 lambda来轻松过滤集合。但是我没有找到一种简洁的方法来在同一条语句中以新列表的形式检索结果。到目前为止,这是我迄今为止最简洁的方法: List&lt;Long&gt; sourceLongList = Arrays.asList(1L, 10L, 50L, 80L, 100L, 120L, 133L, 333L); List&lt;Long&gt; targetLongList = new ArrayList&lt;&gt;(); sourceLongList.stream().filter(l -&gt; l &gt; 100).forEach(targetLongList::add); 网上的示例没有回答我的问题,因为它们停止了而没有生成新的结果列表。必须有一种更简洁的方法。我本来期望的是,Stream类有方法为toList(),toSet(),... 有没有办法targetLongList可以由第三行直接分配变量?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.