如何将类型、它们的子类型信息全部存储在二元搜索树数据结构中?

编辑了一下。

为了更深入的解释我的问题。比如说我有一个工具A,在工具A里面有它的子类型,比如A、B、C、D等,每个子类型都有一个量。

Tool A
there are several specific types available in tool A
S.no.   name                quantity
1.    charger                   5
2.    electronic stuff.        10
...
9. so on                       20

我想用二进制搜索的方式来存储这些数值。所以当用户选择工具A这个选项时,它就会显示出其中所有的具体类型的东西和数量,用户可以借用这些工具中的任何一种,因此上述数据可以根据用户借用的数量进行更新,并在以后归还这些东西。有没有什么方法可以利用二元搜索树的帮助来实现呢?

我到现在所做的是

我的代码是:

public class Tools {

    private string name;
    private string toolInfo;
    private int quantity;


    public string Name
    {
        get { return name; }
        set
        {
            name = value;
        }

    }

    public string ToolInfo
    {
        get { return toolInfo; }
        set
        {
            toolInfo = value;
        }

    }


    public int Quantity
    {
        get { return quantity; }
        set
        {
            quantity = value;
        }

    }


    public Tools(string name, string toolInfo, int quantity) {

        this.name = name;
        this.toolInfo = toolInfo;
        this.quantity = quantity;
    }

    public void toolsInfo()
    {
        //tools info
        WriteLine("Tool name: " + name + " Tool info: " + toolInfo + " Quantity: " + quantity);
    }

    public void addTools()
    {
        //add tools
    }


    public void borrowTools()
    {
        //borrow tools
    }


}

}

/主课

Tools tool1 = new Tools("gardening", "gardening tools...", 40);
            Tools tool2 = new Tools("flooring", "forring tools...", 20);
            Tools tool3 = new Tools("fencing", "fencing tools..", 50);
            Tools tool4 = new Tools("measuring", "measurng tools...", 10);
            Tools tool5 = new Tools("cleaning", "cleaning tools...", 20);
            Tools tool6 = new Tools("painting", "painting tools...", 60);
            Tools tool7 = new Tools("electronic", "electronic tools...", 5);
            Tools tool8 = new Tools("automative", "automative tools..", 20);
            Tools tool9 = new Tools("electricity", "electrucity tools...", 10);'

但是,这只是存储工具的类型,我怎么能把子类型附加到每一个工具上,这样我就可以根据用户的输入或一些条件来操作改变它们的名称或值等?

解决方案:

二进制搜索是前提条件吗?你可以用另一种更简单的方法来解决这个问题。

你可以创建一个新的类(如. ToolsContainer),该类包含的集合是 Tools. 这样你就可以有一个字典来存储键值对,它的键是工具类型,值是另一个工具子类型和工具的字典。例如,你可以使用以下代码来测试它

using System;
using System.Collections.Generic;

// Your existing code goes here

public class ToolsContainer
{
    private Dictionary<string, Dictionary<string, Tools>> dict = new Dictionary<string, Dictionary<string, Tools>>();

    public ToolsContainer()
    {
    }

    public void add(Tools t)
    {
        Dictionary<string, Tools> nested = null;

        // Check if key exists. If it does update it,
        // else create new entry
        if(dict.TryGetValue(t.Name, out nested))
            nested[t.ToolInfo] = t;
        else
        {
            dict[t.Name] = new Dictionary<string, Tools>();
            dict[t.Name][t.ToolInfo] = t;
        }
    }

    public void printData()
    {
        foreach (KeyValuePair<string, Dictionary<string, Tools>> toolsType in dict)
        {
            foreach(KeyValuePair<string, Tools> tool in toolsType.Value)
                 Console.WriteLine("Type = {0}, Tool = {1}, Quantity = {2}", toolsType.Key, tool.Key, tool.Value.Quantity);
         }
    }
}

用下面的代码来测试它

public class Program
{
    public static void Main()
    {
        ToolsContainer c = new ToolsContainer();
        // Add new keys
        c.add(new Tools("gardening", "gardeningTool1", 50));
        c.add(new Tools("automotive","automotiveTool1", 20));
        // Update existing key
        c.add(new Tools("gardening", "gardeningTool1", 40));
        c.printData();
    }
}

输出:

Type = gardening, Tool = gardeningTool1, Quantity = 40
Type = automotive, Tool = automotiveTool1, Quantity = 20

使用上面的方法,你可以插入新的工具和更新现有的工具。你也可以在此基础上进行扩展,使用LINQ来按数据排序(如按数量排序)。

给TA打赏
共{{data.count}}人
人已打赏
未分类

在句子中随机洗练字母。

2022-11-13 21:16:16

未分类

无法在柏树中获取Iframe下的元素[关闭]。

2022-11-13 21:16:18

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索