一、任务:使用栈Hashtable制作一个怪物管理器
实现目标:
(3)每个怪物都有 自己的唯一ID
二、核心类设计
1. 怪物类 (Monster)
class Monster
{
public int id; // 怪物唯一标识
public string name; // 怪物名称
public Monster(int id, string name)
{
this.id = id;
this.name = name;
}
}
2. 怪物管理器 (MonsterMgr)
class MonsterMgr
{
Hashtable MonstersHashTable = new Hashtable(); // 使用Hashtable存储
}
三、核心功能实现
1. 创建怪物
public void CreateMonster(Monster monster)
{
MonstersHashTable.Add(monster.id, monster.name);
Console.WriteLine("添加成功");
}
关键点:使用id作为键,name作为值存储
2. 删除怪物
public void DeleteMonster(Monster monster)
{
MonstersHashTable.Remove(monster.id);
Console.WriteLine("删除成功");
}
关键点:通过id快速定位并移除
四、四种遍历方式对比
方法1:按键遍历(最常用)
foreach (object key in MonstersHashTable.Keys)
{
Console.WriteLine("ID:{0},名称:{1}", key, MonstersHashTable[key]);
}
方法2:按值遍历
foreach (object value in MonstersHashTable.Values)
{
Console.WriteLine("名称:{0}", value);
}
方法3:键值对遍历(推荐)
foreach (DictionaryEntry entry in MonstersHashTable)
{
Console.WriteLine("ID:{0},名称:{1}", entry.Key, entry.Value);
}
方法4:迭代器遍历(底层方式)
IDictionaryEnumerator enumerator = MonstersHashTable.GetEnumerator();
while (enumerator.MoveNext())
{
Console.WriteLine("ID:{0},名称:{1}", enumerator.Key, enumerator.Value);
}
五、完整代码
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace 进阶测试
{
class MonsterMgr
{
private static MonsterMgr instance = new MonsterMgr();
public static MonsterMgr Instance
{
get { return instance; }
}
private void Monster()
{
}
Hashtable MonstersHashTable = new Hashtable();
public void CreateMonster(Monster monster)
{
if(MonstersHashTable.ContainsKey(monster.id))
{
Console.WriteLine("已经包含怪兽id,请更换一个id");
return;
}
MonstersHashTable.Add(monster.id, monster.name);
Console.WriteLine("添加成功");
}
public void DeleteMonster(Monster monster)
{
MonstersHashTable.Remove(monster.id);
Console.WriteLine("删除成功");
}
public void ShowMonster()
{
Console.WriteLine("遍历方法1:根据键遍历");
foreach (object Monster in MonstersHashTable.Keys)
{
Console.WriteLine("怪兽Id:{0},怪兽名:{1}", Monster, MonstersHashTable[Monster]);
}
Console.WriteLine("********************************");
Console.WriteLine("遍历方法2:根据值遍历");
foreach (object Monster in MonstersHashTable.Values)
{
Console.WriteLine("怪兽名:{0}", Monster);
}
Console.WriteLine("********************************");
Console.WriteLine("遍历方法3:遍历键值对");
foreach (DictionaryEntry Monster in MonstersHashTable)
{
Console.WriteLine("怪兽Id:{0},怪兽名:{1}", Monster.Key, Monster.Value);
}
Console.WriteLine("********************************");
Console.WriteLine("遍历方法4:迭代器遍历");
IDictionaryEnumerator MonsterEnumerator = MonstersHashTable.GetEnumerator();
bool flag=MonsterEnumerator.MoveNext();//使枚举器指向第一个位置
while (flag)
{
Console.WriteLine("怪兽Id:{0},怪兽名:{1}", MonsterEnumerator.Key, MonsterEnumerator.Value);
flag = MonsterEnumerator.MoveNext();
}
Console.WriteLine("********************************");
}
}
class Monster
{
public int id;
public string name;
public Monster(int id, string name)
{
this.id = id;
this.name = name;
}
}
class Program
{
static void Main()
{
Monster monster1 = new Monster(1, "大大怪将军");
Monster monster2 = new Monster(2, "小小怪下士");
Monster monster3 = new Monster(3, "开心超人");
Monster monster4 = new Monster(3, "粗心超人");
MonsterMgr.Instance.CreateMonster(monster1);
MonsterMgr.Instance.CreateMonster(monster2);
MonsterMgr.Instance.CreateMonster(monster3);
MonsterMgr.Instance.CreateMonster(monster4);
MonsterMgr.Instance.ShowMonster();
MonsterMgr.Instance.DeleteMonster(monster1);
MonsterMgr.Instance.ShowMonster();
}
}
}
C#中Hashtable的增删查操作
3575

被折叠的 条评论
为什么被折叠?



