我需要一个树/有向无环图实现,如下所示:
public class TreeNode<K, V> {
private K key; // 'key' for this node, always present
private V value; // 'value' for this node, doesn't have to be set
private TreeNode<K, V> parent;
private Set<TreeNode<K, V>> children;
}
Run Code Online (Sandbox Code Playgroud)
TreeNode仅仅是围绕重点和可能的值的包装(节点不必有设定值).标准API或Commons等中有什么东西可以帮我吗?
我不介意自己写(我当然不是要求大家)我只是不想重新发明轮子.
我想在组合中存储组织结构图.我认为树数据结构最适合我的需要,因为我需要向一个节点添加多个节点.
LinkedList 如果我理解正确的话,只提供一个节点添加到另一个节点.
我看过C5 treeset集合,但它似乎没有Add()方法向一个节点添加2个以上的节点.
我也Treeview从Windows窗体库查看了类,但我不想将Windows窗体dll添加到我的项目中,因为我正在构建服务层应用程序.(或者没事?)
我不想写自己的树集合类,如果已经有第三方提供的那个?
有什么建议吗?
谢谢
我需要一个支持"和"和"或"的树结构.例如,给定一个正则表达式,比如ab|c(d|e)我想将其转换为树.
所以,起初我们有两个"或"分支......它可以下降ab,或者c(d|e).如果你低着头的ab分支,你会得到两个节点,a 和 b(或a后面b,等等).然后,如果你走的c(d|e)分支,你会得到c 和 (d|e),然后(d|e)被分成d 或 e.
制作树形结构很容易,你只需要类似的东西
class Node {
string element;
Node[] children;
}
Run Code Online (Sandbox Code Playgroud)
但那么你怎么知道这些孩子应该"被"或""?我想树的每个级别应该在"anding"和"oring"之间交替

那有意义吗?谁能为此建议一个结构?
有些人建议在节点上存储"操作员",这很好,但是没有办法利用每个级别总是交替的事实,或者,和,和......?
编辑:不太确定人们为什么一直认为这是一棵二叉树.事实并非如此.我希望这个小小的代码片段会让你失望.这个例子碰巧只有2个分支.
目前倾向于此:
abstract class Node { }
class DataNode : Node
{
string data;
}
abstract class OpNode : Node
{
Node[] children;
}
class OrNode : OpNode { }
class AndNode : …Run Code Online (Sandbox Code Playgroud) 我有这样的XML:
我有一个属性名称的成员类.
我怎样才能阅读每单位及其子单位分成多个通用的List<Unit>,可以再有孩子List<Unit>在递归的方式使用最新的.NET技术?
<Root>
<Units Name="Test1">
<Unit Name="Test11" />
<Unit Name="Test12">
<Unit Name="Test21" />
<Unit Name="Test22" />
<Unit Name="Test23">
<Unit Name="Test31" />
<Unit Name="Test32" />
<Unit Name="Test33" />
</Unit>
<Unit Name="Test24" />
</Unit>
</Units>
<Units Name="Test2" />
<!-- ... -->
<Units Name="Test3" />
<!-- ... -->
<Units Name="Test4" />
</Root>
Run Code Online (Sandbox Code Playgroud) 我正在对datatable执行SQL查询.查询可以返回多个列.结果是键值格式并表示分层数据.请参见下面的屏幕截图
图像显示3个部分.首先是数据,然后是数据的层次表示和JSON等价物.
目前图像显示4级数据,但我们可以有6-7级数据.格式将保持不变,但列数可以更改.
如何使用C#获得所需的结果??我知道这是基本的编程,但我很难用它.
在父和子之间建立关联时,下面的代码看起来很复杂.
问题:关联父子数据模型对象的最佳方法是什么?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq.Expressions;
using ConsoleApplication1;
class Child
{
public string Name { get; set; }
public Parent Parent { get; set; }
}
class Parent
{
public string Name { get; set; }
public IEnumerable<Child> Children { get; set; }
}
class Program
{
static void Main(string[] args)
{
Parent p1 = new Parent { Name = "P1" };
Child c1 = new Child { Name = "C1" };
c1.Parent …Run Code Online (Sandbox Code Playgroud) 我有一个看起来像这样的对象:
Tree {
String Name;
Int ID;
List<SubObjects> SubObjects
}
SubObjects {
int Level;
string Name;
}
Run Code Online (Sandbox Code Playgroud)
我有以下形式的信息List<Output>在哪里Output是:
Output {
String TreeName;
Int TreeID;
Int SubObjectLevel;
String SubObjectName;
}
Run Code Online (Sandbox Code Playgroud)
本质上,树以以下格式表示
Tree1 TreeID1 Level1 SubObject1
Tree1 TreeID1 Level2 SubObject2
Tree1 TreeID1 Level3 SubObject3
Tree1 TreeID1 Level1 SubObject4
我想编写一个 LINQ 查询来填充 Tree,但我被困在 GroupBy。这是一个非常基本的问题,但我正在学习 LINQ,任何帮助将不胜感激。
谢谢!
编辑:
到目前为止,这是我的代码
var trees =
from o in output
select new Tree {
Name = o.TreeName,
ID = o.TreeID,
SubObjects = //somehow group …Run Code Online (Sandbox Code Playgroud) 我现在正在桌子上敲打几个小时,但是在C#中实现树形结构似乎太愚蠢了.
Node和NodeCollection.Node并NodeCollection可以有一个父NodeCollectionNodeCollection可以有一个子节点集合,它们是Node或者NodeCollectionNode不能有任何孩子.Node或NodeCollection不具有父节点被认为是根节点A Node具有任何任意类型的值,使用泛型
是否有BCL的集合类型用于此目的?到目前为止我所拥有的:
public abstract class NodeBase {
protected NodeCollection Parent { get; set; }
}
public class Node<T> : NodeBase {
public string Key { get; set; }
public T Value { get; set; }
}
public class NodeCollection : NodeBase …Run Code Online (Sandbox Code Playgroud) c# ×8
tree ×3
.net ×2
collections ×2
linq ×2
c#-4.0 ×1
catamorphism ×1
datamodel ×1
f# ×1
graph-theory ×1
java ×1
json ×1
linq-to-xml ×1
oop ×1
recursion ×1