C#练习题——基于Hashtable的增删查操作

C#中Hashtable的增删查操作

一、任务:使用栈Hashtable制作一个怪物管理器

实现目标:

(1)制作一个怪物管理器

(2)提供创建怪物,移除怪物的方法

(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();
        }
    }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值