C# - List<Items> 中的项目与 List<ItemsContainer> 中的 ItemsContainer 之间的匹配

C# - Match between items in List<Items> to ItemsContainer in List<ItemsContainer>

我有一个项目列表和一个包含项目的 class 列表容器。

  1. 所有项目都是独一无二的
  2. 每个项目最多位于 一个 ItemContainer
  3. 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;
        }
    }
}

它仍然不理想,因为您的设置之前存在不幸的问题,但由于只检查项目一次,它会稍微快一些。