C#是否支持嵌套的强类型树结构?

时间:2018-09-12 20:47:45

标签: c# arrays jagged-arrays

我想知道C#是否可以使用object[]定义强类型嵌套锯齿数组而不的方式。

类似:

var nested = new {1, 2, {3, {4, 5}, 6}, 7};

我想要一个int的嵌套数组。

请考虑以下数组: [[1, 2, [3]], 4, [5], [[[6]]]]

这是我的操作方式:

var myNestedJagged = new object[]
{
    new object[]
    {
        1, 2, new object[] {3}
    },
    4,
    new object[] {5},
    new object[] {new object[] {new object[] {6}}}
};

2 个答案:

答案 0 :(得分:3)

我认为可以改善这种情况的唯一方法。这是强类型的,它使您可以根据节点的类型使用单独的逻辑(通过执行显式Display display = getWindowManager().getDefaultDisplay(); imageView.getLayoutParams().height ((or width)) = display.getHeight()/2; 检查以确定哪种节点类型,或者通过执行某种OO技术来描述操作)作为基础is中的抽象方法,并根据各自的行为方式在NodeTree中单独实现,或通过实现Visitor pattern)。

Leaf

但是,建筑有点难看。

// all items are nodes
abstract class Node
{
}

// a tree is just a collection of nodes; it has no value
class Tree : Node
{
    public Tree(params Node[] children)
    {
        Children = children;
    }
    public IReadOnlyCollection<Node> Children { get; }
}

// a leaf is just a value; it has no children
class Leaf : Node
{
    public Leaf(int value)
    {
        Value = value;
    }
    public int Value { get; }
}

答案 1 :(得分:0)

根据您的使用,您可以使用元组:

var a = (1, 2, (3, (4, 5), 6), 7);
var b = ((1, 2, (3)), 4, (5), (((6))));

限制是创建它们后,您无法(轻松)调整它们的大小。