c# - 从列表中删除对象字符串属性不在另一个列表中的对象的财产
问题描述
所以我有两个清单
List<ObjectA>
和List<ObjectB>
每个列表都包含一个字符串属性ItemID
我有一个问题,如果ObjectA
在列表中的任何字符串属性中找不到列表中的任何字符串属性,则从列表中ObjectB
删除。ObjectA
到目前为止,这是我的代码
List<string> orderedItemIds = new List<string>();
List<string> shippedItemIds = new List<string>();
for (int y = 0; y <= result.Order_Info.Order_Items.Count - 1; y++)
{
orderedItemIds.Add(result.Order_Info.Order_Items[y].Item_Id);
}
for (int i = 0; i <= result.Order_Info.Shipments.Count-1; i++)
{
for (int x = 0; x <= result.Order_Info.Shipments[i].Items_Info.Count - 1; x++)
{
shippedItemIds.Add(result.Order_Info.Shipments[i].Items_Info[x].Item_Id);
}
}
现在,即使我能够识别出哪个字符串不在另一个列表中,我也会坚持下去,我将如何删除该对象?我是否只是遍历要从中删除的列表的每个对象并检查该字符串是否在列表中,如果是则将其删除?
解决方案:感谢答案,我意识到我可以翻转逻辑,但我想我是有远见的。
List<string> orderedItemIds = new List<string>();
List<OrderShipmentModel> shippedItems = new List<OrderShipmentModel>();
for (int y = 0; y <= result.Order_Info.Order_Items.Count - 1; y++)
{
orderedItemIds.Add(result.Order_Info.Order_Items[y].Item_Id);
}
for (int i = 0; i <= result.Order_Info.Shipments.Count-1; i++)
{
for (int x = 0; x <= result.Order_Info.Shipments[i].Items_Info.Count - 1; x++)
if(orderedItemIds.Any(item => item == result.Order_Info.Shipments[i].Items_Info[x].Item_Id))
shippedItems.Add(result.Order_Info.Shipments[i]);
}
解决方案
You can change the logic here, instead of removing items from original list, you can create the new list that will contain only valid
items.
class Program
{
private class MyClass
{
public string ItemId { get; set; }
}
static void Main(string[] args)
{
var listA = new List<MyClass> {
new MyClass { ItemId = "a"},
new MyClass { ItemId = "b"},
new MyClass { ItemId = "c"},
new MyClass { ItemId = "d"}};
var listB = new List<MyClass> {
new MyClass { ItemId = "a"},
new MyClass { ItemId = "b"},
new MyClass { ItemId = "x"},
new MyClass { ItemId = "y"}};
var listWithValidItemsOnly = new List<MyClass>();
foreach (var itemA in listA)
{
if (listB.Any(item => item.ItemId == itemA.ItemId))
listWithValidItemsOnly.Add(itemA);
}
}
}
I made this example simple to depict the logic here. Keep in mind that for bigger lists, it would be better to convert listB
to Dictionary so then you will be able to get the presence of any key with O(1) complexity.
推荐阅读
- image - U Net中keras中的多尺度分割掩码输出
- deep-learning - 下列关于 Softmax 函数的选项中哪些是正确的?
- java - Oracle Apex ords 安装
- java - 为什么Min和Max num不更新
- sql - 当id相同时如何将postgresql分组到新的附加值中
- kubernetes - Helm - how to set custom service port for ingress controller
- apache-kafka - On demand horizontally scaling event driven architectures
- mysql - Spring 数据反应存储库 - r2dbc 不工作
- javascript - how to call vuejs function from seperate javascript function
- jquery - Update bindings when element is updated outside angular