C# - List<Items> 中的项目与 List<ItemsContainer> 中的 ItemsContainer 之间的匹配
C# - Match between items in List<Items> to ItemsContainer in List<ItemsContainer>
我有一个项目列表和一个包含项目的 class 列表容器。
- 所有项目都是独一无二的
- 每个项目最多位于 一个 ItemContainer
- ItemContainer 仅支持:Remove(Item) 和 Contains(Item) 方法
我想从所有 itemContainer 中删除列表中的所有项目。
现在我正在考虑做这样的事情:
List<ItemContainer> itemContainerList = ...
List<Item> itemsList = ...
foreach (ItemContainer itemContainer in itemContainerList)
{
foreach (Item item in itemsList)
{
if (itemContainer.Contains(item))
{
itemContainer.Remove(item);
}
}
}
希望能更高效、更优雅。
谢谢,
阿维拉姆。
根据公开的更多信息,我发现这些限制意味着任何“传统上有效”的方法都不适用。
根据您的限制,我只能建议翻转循环:
foreach (Item item in itemsList)
{
foreach (ItemContainer itemContainer in itemContainerList)
{
if (itemContainer.Contains(item))
{
itemContainer.Remove(item);
break;
}
}
}
它仍然不理想,因为您的设置之前存在不幸的问题,但由于只检查项目一次,它会稍微快一些。
我有一个项目列表和一个包含项目的 class 列表容器。
- 所有项目都是独一无二的
- 每个项目最多位于 一个 ItemContainer
- ItemContainer 仅支持:Remove(Item) 和 Contains(Item) 方法
我想从所有 itemContainer 中删除列表中的所有项目。
现在我正在考虑做这样的事情:
List<ItemContainer> itemContainerList = ...
List<Item> itemsList = ...
foreach (ItemContainer itemContainer in itemContainerList)
{
foreach (Item item in itemsList)
{
if (itemContainer.Contains(item))
{
itemContainer.Remove(item);
}
}
}
希望能更高效、更优雅。
谢谢, 阿维拉姆。
根据公开的更多信息,我发现这些限制意味着任何“传统上有效”的方法都不适用。
根据您的限制,我只能建议翻转循环:
foreach (Item item in itemsList)
{
foreach (ItemContainer itemContainer in itemContainerList)
{
if (itemContainer.Contains(item))
{
itemContainer.Remove(item);
break;
}
}
}
它仍然不理想,因为您的设置之前存在不幸的问题,但由于只检查项目一次,它会稍微快一些。