如何使用 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<T>
; 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 中使用?