Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 名单及;子列表数据结构_C#_Data Structures_Nested Lists - Fatal编程技术网

C# 名单及;子列表数据结构

C# 名单及;子列表数据结构,c#,data-structures,nested-lists,C#,Data Structures,Nested Lists,我正在尝试构建一个具有大量输入的工程应用程序 e、 g.用户输入用于施工的材料,并且必须描述其规格,但每个项目都有不同的规格和技术数据,因此我尝试制作一个嵌套列表系统,该系统在下图中具有以下结构 如图所示,我正在尝试使列表动态化,以便可以添加和删除新列表 我将使用C#作为我的界面,使用SQL server作为我的数据库 但我一直在使用这样一个列表的数据结构。听起来像是在寻找一个树结构。链表是一种很好的方法。NET中有一个现成的LinkedList结构,但我更喜欢自己编写,因为您需要的通常是它

我正在尝试构建一个具有大量输入的工程应用程序

e、 g.用户输入用于施工的材料,并且必须描述其规格,但每个项目都有不同的规格和技术数据,因此我尝试制作一个嵌套列表系统,该系统在下图中具有以下结构

如图所示,我正在尝试使列表动态化,以便可以添加和删除新列表

我将使用C#作为我的界面,使用SQL server作为我的数据库


但我一直在使用这样一个列表的数据结构。

听起来像是在寻找一个树结构。链表是一种很好的方法。NET中有一个现成的LinkedList结构,但我更喜欢自己编写,因为您需要的通常是它的最小版本

class Node
{
    Dictionary<string, Node> SubLists { get; set; }
    public List<string> Items { get; set; }
}
类节点
{
字典子列表{get;set;}
公共列表项{get;set;}
}
对于每个子列表,您可以附加项目(如果是最终的),也可以添加新的节点列表,其中每个子列表都可以有一个节点列表,以便在树中进一步向下移动,或者有项目并且是最终的。这与操作系统中的目录工作原理类似(不完全相同,但想法类似)

要了解更多信息,您可以对链表进行后续阅读,它们是一种基本的数据结构,因此记录在许多在线资源中


通过将文档作为JSON存储在nvarchar(MAX)字段中,可以很容易地解决SQL问题

听起来你在寻找一个树形结构。链表是一种很好的方法。NET中有一个现成的LinkedList结构,但我更喜欢自己编写,因为您需要的通常是它的最小版本

class Node
{
    Dictionary<string, Node> SubLists { get; set; }
    public List<string> Items { get; set; }
}
类节点
{
字典子列表{get;set;}
公共列表项{get;set;}
}
对于每个子列表,您可以附加项目(如果是最终的),也可以添加新的节点列表,其中每个子列表都可以有一个节点列表,以便在树中进一步向下移动,或者有项目并且是最终的。这与操作系统中的目录工作原理类似(不完全相同,但想法类似)

要了解更多信息,您可以对链表进行后续阅读,它们是一种基本的数据结构,因此记录在许多在线资源中


通过将文档作为JSON存储在nvarchar(MAX)字段中,可以很容易地解决SQL问题

也许像这样的事情对你在C#端会有用

公共类选项
{
公共字符串名称{get;set;}
/// 
///用于将子选项视为单独的属性,而不是
///此属性的选项。
/// 
公共布尔分类{get;set;}
/// 
///此属性或子属性的可用选项列表
///如果'IsCategory'为true,则为该属性。
/// 
公共列表选项{get;set;}
/// 
///如果“IsCategory”为false,则表示为此属性选择的选项。
/// 
公共选项选择选项{get;set;}
公共选项(字符串名称,布尔分类)
{
名称=名称;
IsCategory=IsCategory;
选项=新列表();
}
}
公共无效示例()
{
选项管道=新选项(“管道”,真);
选项材料=新选项(“材料”,假);
选项大小=新选项(“大小”,false);
选项黑钢=新选项(“黑钢”,正确);
选项不锈钢=新选项(“不锈钢”,正确);
选项计划=新选项(“计划”,false);
附表。选项。添加(新选项(“10”,假));
附表。选项。添加(新选项(“20”,假));
附表。选项。添加(新选项(“40”,假));
附表.选项.添加(新选项(“80”,假));
黑钢。选项。添加(附表);
不锈钢。选项。添加(明细表);
材料。选项。添加(黑钢);
材料。选项。添加(不锈钢);
管道。选项。添加(材质);
管道。选项。添加(尺寸);
}
在SQL方面,您可以定义这些选项,方法是为每个选项提供一个唯一的索引,并生成如下表:

+---------+-----------------+---------------------+------------------+
| ID<INT> | NAME<VARCHAR>   | ISCATEGORY<BOOLEAN> | OPTIONS<VARCHAR> |
+---------+-----------------+---------------------+------------------+
| 0       | Pipes           | true                | 1,2              |
| 1       | Material        | false               | 3,4              |
| 2       | Size            | false               |                  |
| 3       | Black Steel     | true                | 5                |
| 4       | Stainless Steel | true                | 5                |
| 5       | Schedule        | false               | 6,7,8,9          |
| 6       | 10              | false               |                  |
| 7       | 20              | false               |                  |
| 8       | 30              | false               |                  |
| 9       | 40              | false               |                  |
+---------+-----------------+---------------------+------------------+
+---------+-----------------+---------------------+------------------+
|ID |名称|分类|选项|
+---------+-----------------+---------------------+------------------+
|0 |管道|正确| 1,2|
|1 |材料|虚假| 3,4|
|2 |尺寸|假||
|3 |黑钢|真| 5|
|4 |不锈钢|真| 5|
|5 |附表|假| 6,7,8,9|
|6 | 10 |假||
|7 | 20 |假||
|8 | 30 |假||
|9 | 40 |假||
+---------+-----------------+---------------------+------------------+

也许像这样的东西在C#端对你有用

公共类选项
{
公共字符串名称{get;set;}
/// 
///用于将子选项视为单独的属性,而不是
///此属性的选项。
/// 
公共布尔分类{get;set;}
/// 
///此属性或子属性的可用选项列表
///如果'IsCategory'为true,则为该属性。
/// 
公共列表选项{get;set;}
/// 
///如果“IsCategory”为false,则表示为此属性选择的选项。
/// 
公共选项选择选项{get;set;}
公共选项(字符串名称,布尔分类)