gpt4 book ai didi

c# - 从 C# list 中提取具有该类型项目总数的唯一项目的简单方法

转载 作者:太空宇宙 更新时间:2023-11-03 11:09:42 24 4
gpt4 key购买 nike

如果问错了地方,我们深表歉意;我是一个非常新的爱好者程序员。

我目前在业余时间开发一款小型自上而下的射击游戏,无非是一个简单的 self 驱动项目,供学习和娱乐。我使用 C# 和 XNA 作为框架,我试图通过拾取游戏对象添加到库存中来为游戏添加一些变化。

目前我有一个 List<GamePlayObjects> “WorldObjects”,我有一个 ObjectManager管理所有对象更新、碰撞和绘制函数的类,我对我目前所拥有的感到满意。在与 GamePlayObject 发生碰撞时(例如小行星爆炸后的一小块铁矿石),它会从主列表“WorldObjects”中删除该对象并将其添加到另一个名为 List<GamePlayObjects> inventory 的列表中。

现在我要做的是在屏幕上绘制一个小区域,其中包含元素 Sprite 和我收集的该元素的总数。我对绘图方面并不感兴趣,更多的是从库存中提取数据。

我已经阅读了几个关于可能使用 HashSet 的帖子从我的库存中获取独特的元素,然后从 HashSet 中提取每件元素的总数,但我现在正在努力理解这一点,因此我来这里寻求帮助。

我的代码示例以及我试图实现的目标。

我有一个包含我所有 WorldObject 的列表,每个世界对象都是一个包含与该 worlObject 相关的所有内容的类。

private List<GamePlayObject> gameObjects = new List<GamePlayObject>();

当一个对象,让我们说“玩家”与另一个对象“铁矿石”发生碰撞时,我从以下位置移除铁矿石世界对象:

private List<GamePlayObject> gameObjects = new List<GamePlayObject>();

并将其添加到名为 Inventory 的新列表中

private List<GamePlayObject> playerInventory = new List<GamePlayObject>();

现在随着越来越多的对象被收集并添加到我的 list 中,我想提取信息并将有关我的 list 的信息显示到屏幕上。

例如,在我屏幕的右侧,我想显示我库存中的元素 list 以及每件元素的总数量,这些数据应该取 self 的库存 list 。

所以它可能看起来像这样:

Iron Ore x 3
Steel x 10
Gold x 18
Uranium x 12

最佳答案

您可以使用 List<T> ,并使用 List<T>.Remove .但是,使用 List<T> 的问题就像这样Remove将不得不搜索整个列表,一次搜索一项,以找到要删除的项目。这也会导致出现大副本,因为您删除的元素之后的元素需要在内部数组中向下移动。

收藏如 HashSet<T>但是,可以非常快速地查找和删除项目,而无需副本。这需要您的类型实现 GetHashCode ,但如果您总是想要独特的元素,效果会更好。

对于您的两个收藏,一个可能的选择是使用 Dictionary<GamePlayObject, int> ,这将允许您快速查找和更改世界和库存中该类型对象的数量。同样,这需要您的 GamePlayObject类覆盖 object.GetHashCodeobject.Equals , 并实现 IEquatable<GamePlayObject> .

关于c# - 从 C# list<T> 中提取具有该类型项目总数的唯一项目的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14526200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com