我正在使用Unity,并尝试使用字典键/值对从列表中删除重复项。
问题: 运行代码时,如果重复,则列表中的第一项将被删除,而不是“ List.Remove(Item item)”这样的特定项。
updateCart(context, cart) {
return new Promise((resolve, reject) => {
axios.patch(`update/cart/${cart.id}` , {
id: cart.rowId,
qty: cart.qty,
size: cart.sizeVal,
image: cart.image
})
.then(response => {
context.commit('updateCart', response.data)
resolve(response)
})
.catch(error => {
reject(error)
})
})
},
在if语句public static Dictionary<string, Farm> farmDict = new Dictionary<string, Farm>();
public static List<Farm> farmBuildingsList = new List<Farm>();
public static void UpdateList<T>(List<T> list, Dictionary<string, T> dict, string ID, T resBuilding) where T : ResourceBuildings, new()
{
T obj = new T()
{
ID = resBuilding.ID,
hourlyIncome = resBuilding.hourlyIncome,
baseHour = resBuilding.baseHour,
incomeIncrement = resBuilding.incomeIncrement,
totalSupply = resBuilding.totalSupply
};
if (dict.ContainsKey(ID))
{
dict[ID] = obj;
list.Remove(dict[ID]);
list.Add(dict[ID]);
}
else
{
dict.Add(obj.ID, obj);
list.Add(obj);
}
}
上使用Debug.Log为空,但是dict [ID] .ID(以及所有属性)包含正确的值,因此整个内容也不为空。我不确定这是否是问题,但我已要求在gamedev.stackexchange中修复Object.name的解决方案。
我已经阅读了更合适的方法(https://www.dotnetperls.com/duplicates和其他stackoverflow帖子),以使用Linq和哈希集删除重复项,但是我不知道如何覆盖Equals和HashCode函数。
答案 0 :(得分:3)
dict[ID] = new T
{
ID = resBuilding.ID,
hourlyIncome = resBuilding.hourlyIncome,
baseHour = resBuilding.baseHour,
incomeIncrement = resBuilding.incomeIncrement,
totalSupply = resBuilding.totalSupply
};
list.RemoveAll(item => item.ID == ID);
list.Add(dict[ID]);
旁注:dict[key] = value
足以创建具有指定键的新元素或更新现有元素(请参见docs),因此整个{{1 }}毫无意义。
也许这是一个XY Problem,并且您当前的方法可能是隐藏您要解决的实际问题(可能是:I want a dictionary-like structure that shows up in inspector)。