如何使用 Lambda 语法从列表中删除

Posted

技术标签:

【中文标题】如何使用 Lambda 语法从列表中删除【英文标题】:how to remove from list using Lambda syntax 【发布时间】:2012-12-30 18:28:25 【问题描述】:

给定:

List<Name> names = new List<Name>(); //list full of names

public void RemoveName(string name) 
   List<Name> n = names.Where(x => x.UserName == name);;
   names.Remove(n);

执行删除的 Lambda 语法是什么?

如果该功能是否删除,我如何获得“成功”的指示?

【问题讨论】:

【参考方案1】:
names.RemoveAll(x => x.UserName == name);

请注意,lambda 语法 所做的只是提供一个Predicate&lt;T&gt;; lambda 语法与它最终做什么 与 lambda 完全无关。

或者单场比赛(见 cmets):

var found = names.Find(x => x.UserName == name);
if(found != null) names.Remove(found);

或:

var index = names.FindIndex(x => x.UserName == name);
if(index >= 0) names.RemoveAt(index);

【讨论】:

我只想删除一个名字,即作为参数发送 @darko 它只会删除那些匹配的;但是...我将为单个删除添加一个编辑... 挑剔,但为了完整性;以上所有内容都会在列表中插入一个空值。如果有这种可能,您需要在 lambda 中进行空检查。 如果函数没有删除,我如何获得“成功”的指示? names.Find/names.Remove 方法比基于索引的方法慢,平均需要 1.5 次遍历列表而不是 1 次。最好将两者中的较快者放在首位并提到替代方案的放缓。在这种情况下,更快的方法没有缺点。【参考方案2】:
var n = names.SingleOrDefault(x => x.UserName == name)
if(n != null && n.UserName.length > 0)

 names.Remove(n);

var n= names.Where(x => x.UserName == name).First();
names.Remove(n)

【讨论】:

如果函数删除与否,我如何获得“成功”的指示? names.Remove(n) Returns: //true 如果项目被成功移除;否则为假。如果在中找不到项目,此方法也 //返回 false

以上是关于如何使用 Lambda 语法从列表中删除的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 lambda 删除列表列表中数字下方的元素? Python [重复]

如何通过 Lambda 或 LINQ 从列表中获取不同的实例

如何从 S3 加载泡菜文件以在 AWS Lambda 中使用?

如何从 AWS Lambda 函数 + 无服务器框架的 URL 中删除阶段?

关于linq/lambda中如何使用DataDiff的问题

Java 8 lambda 从列表中获取和删除元素