c# - 以最快的方式从有条件的列表中删除

标签 c# .net arrays list foreach

是否有其他方法可以从列表中删除对象 而不是我用 foreach 所做的;

我的意思是我不认为我做的方式是最好的方式和优化的方式

像这样:

var allobj= .. //this a list of all object
var myobj= .. //this a list of my selected object
foreach (var inu in myobj.ToArray())
{
    if (allobj.Where(p => p.UserName == inu.UserName).Count() != 0)
    {
        myobj.Remove(inu);
    }
}

最佳答案

其他答案有缺点,那就是“创建不包括所选项目的新集合”而不是从实际集合中删除项目。

这种方法不会从主集合中复制,它会以最佳速度直接从列表中删除项目。

您将从所选项目生成哈希集,以便您可以以恒定速度在哈希集中查找字符串。

// generate hashset from selected items
var set = new HashSet<string>(myobj.Select(x => x.UserName));

// remove all items from list.
allobj.RemoveAll(x => set.Contains(x.UserName));

关于c# - 以最快的方式从有条件的列表中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46756637/

相关文章:

javascript - 遍历对象数组并获得新的对象数组

c# - Google Analytics 和主页/用户控制交换

c# - 打开CV非基本形状检测

c# - 使用 OleDbConnection 读取制表符分隔的文件

c# - ELMAH 在哪里保存数据?

c# - 如何减小 ComboBox 的 DropDownHeight?

arrays - Array() 上的 .to_json 在 Crystal 中不起作用

c - 在函数中返回静态数组

c# - C#中关于ThreadPool的困惑

c# - 使用 SharpSVN 在 C# 中预提交 Hook