如何通过id删除列表中的多个对象?
How to remove multiple objects in List by id?
我有一个class如下
class MyClass
{
public string id { get; set; }
public string data { get; set; }
}
我有一组 ID 需要删除:
List<myClass> myObjArray = new List<myClass>;
myClass myObj1 = new myClass { id = "1", data = "aaa"};
myClass myObj2 = new myClass { id = "2", data = "bbb"};
myClass myObj3 = new myClass { id = "3", data = "ccc"};
myClass myObj4 = new myClass { id = "4", data = "ddd"};
myObjArray.Add(myObj1);
myObjArray.Add(myObj2);
myObjArray.Add(myObj3);
myObjArray.Add(myObj4);
string [] idToBeRemove = {"1", "3"};
有什么方法可以删除 myObjArray 中 id 在 idToBeRemove 字符串中的 myObj?
要从现有 List
中删除,您可以使用 List.RemoveAll(Predicate):
myObjArray.RemoveAll(r => idToBeRemove.Contains(r.id));
要在新集合中获得结果,您可以使用 Enumerable.Where and Enumerable.Contains:
var result = myObjArray.Where(m => !idToBeRemove.Contains(m.id)).ToList();
var result = myObjArray.Where(m => !idToBeRemove.Contains(m.id)).ToList();
foreach (var item in result)
{
myObjArray.Remove(item);
}
List<T>
有一个方法 RemoveAll
可以完成您的需要。与 Where(...).ToList()
之类的操作不同,它将修改现有列表而不是创建新列表。
myObjArray.RemoveAll(item => idToBeRemove.Contains(item.id));
请注意,随着要删除的项目数量的增加,您会希望转移到性能更高的项目,例如 HashSet<T>
,但以您当前的项目数 2 为例,这并不是迫切需要.
@Richardissimo 还在对您的问题的评论中提供了一个很好的建议,当主列表本身增长时,Dictionary<K, V>
可能会有用。同样,不是立即需要一个小列表,而是随着它的增长以及性能是否成为问题时要记住的事情。
使用此删除 ID:
myObjArray.RemoveAll(item => idToBeRemove.Contains(item.id));
我有一个class如下
class MyClass
{
public string id { get; set; }
public string data { get; set; }
}
我有一组 ID 需要删除:
List<myClass> myObjArray = new List<myClass>;
myClass myObj1 = new myClass { id = "1", data = "aaa"};
myClass myObj2 = new myClass { id = "2", data = "bbb"};
myClass myObj3 = new myClass { id = "3", data = "ccc"};
myClass myObj4 = new myClass { id = "4", data = "ddd"};
myObjArray.Add(myObj1);
myObjArray.Add(myObj2);
myObjArray.Add(myObj3);
myObjArray.Add(myObj4);
string [] idToBeRemove = {"1", "3"};
有什么方法可以删除 myObjArray 中 id 在 idToBeRemove 字符串中的 myObj?
要从现有 List
中删除,您可以使用 List.RemoveAll(Predicate):
myObjArray.RemoveAll(r => idToBeRemove.Contains(r.id));
要在新集合中获得结果,您可以使用 Enumerable.Where and Enumerable.Contains:
var result = myObjArray.Where(m => !idToBeRemove.Contains(m.id)).ToList();
var result = myObjArray.Where(m => !idToBeRemove.Contains(m.id)).ToList();
foreach (var item in result)
{
myObjArray.Remove(item);
}
List<T>
有一个方法 RemoveAll
可以完成您的需要。与 Where(...).ToList()
之类的操作不同,它将修改现有列表而不是创建新列表。
myObjArray.RemoveAll(item => idToBeRemove.Contains(item.id));
请注意,随着要删除的项目数量的增加,您会希望转移到性能更高的项目,例如 HashSet<T>
,但以您当前的项目数 2 为例,这并不是迫切需要.
@Richardissimo 还在对您的问题的评论中提供了一个很好的建议,当主列表本身增长时,Dictionary<K, V>
可能会有用。同样,不是立即需要一个小列表,而是随着它的增长以及性能是否成为问题时要记住的事情。
使用此删除 ID:
myObjArray.RemoveAll(item => idToBeRemove.Contains(item.id));