锯齿状的动态深度词典?

dee*_*392 2 c# recursion jagged-arrays recursive-datastructures

我试图从一系列代表深度的字符串中提取:

'foo/bar/x'
'foo/bar/baz/x'
'foo/bar/baz/x'
'foo/bar/lol/x'
Run Code Online (Sandbox Code Playgroud)

x我不关心的数字在哪里.我已经完成了分裂/和循环,在PHP中,我会做一些事情,比如检查我在循环中的位置(使用for (i=0; etc)),然后使用它来确定我构建输出数组的深度,如:

output['foo']['bar'] = 1
output['foo']['bar']['baz'] = 2
output['foo']['bar']['lol'] = 1
Run Code Online (Sandbox Code Playgroud)

问题是"深度"是动态的,可能只是3/4深(我可以通过对价值的大量检查i和单独处理它来解释)或者说10或更深,在这种情况下某种类型的递归函数可能是最好的.

我遇到了一个问题,即将字符串作为数组索引我需要使用字典,但是你必须在字典中指定类型,这意味着你需要知道高级的深度(如果我是的话,请纠正我)在实例化字典对象时.

我猜一个攻击可能就像调用一个递归函数,每次调用它来传递i指示深度,然后函数调用自己i每次递减,直到它从该输入字符串构建树的一部分,但它是什么存储我在C#中使用的结构,我不确定.

最终输出将是一个CSV,我可以打开它作为电子表格,如下所示:

Foo        0
|__Bar     1
   |__Baz  2
   |__Lol  1
Run Code Online (Sandbox Code Playgroud)

也许对于溶液中的一种方向是使用纯C#阵列和简单地存储的标题(例如foo)在那里,保持了阵列indicies,这可能是最好的做法反正的信息.谢谢.

Mar*_*zek 5

您可以使用以下成员创建自己的类:

class Directory
{
    public int Value { get; set; }
    public Dictionary<string, Directory> SubDirectories { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

使用它存储数据,然后以递归方式将其导出为CSV.

要获得output["foo"]["bar"]语法,可以在类中实现索引器:

public Directory this[string name]
{
    get { return SubDirectories.ContainsKey("name") ? SubDirectories[key] : null; }
    set { SubDirectories.Add(name, value); }
}
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下,我不认为这是必要的,但可以很容易地解决. (2认同)