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,这可能是最好的做法反正的信息.谢谢.
您可以使用以下成员创建自己的类:
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)