using System.Collections.Generic; namespace Gameplay.Unit.Data { public class UnitContainerWithTroop : UnitContainer { private Dictionary> _troopDict = new Dictionary>(); protected override void _OnAdd(GameUnit unit) { base._OnAdd(unit); var troopId = unit.commonData.troopId; if (_troopDict.TryGetValue(troopId, out List list)) { list.Add(unit); } else { list = new List(); list.Add(unit); _troopDict.Add(troopId, list); } } protected override void _OnRemove(GameUnit unit) { base._OnRemove(unit); var troopId = unit.commonData.troopId; // 理论上来说必然存在, 出现报错了再说 _troopDict[troopId].Remove(unit); } public List GetListByTroop(int troopId) { if (_troopDict.TryGetValue(troopId, out List list)) { return list; } return null; } } }