0
A
回答
3
這是我的快速嘗試。
我假設,而不是1.0
和2.0
分別意味着1
和2
,否則它會不一致。
public class HierarchyGenerator
{
private List<int> levels = new List<int> { 1 };
public void DownOneLevel()
{
levels.Add(1);
}
public void UpLevels(int numLevels)
{
if (levels.Count < numLevels + 1)
throw new InvalidOperationException(
"Attempt to ascend beyond the top level.");
for (int i = 0; i < numLevels; i++)
levels.RemoveAt(levels.Count - 1);
MoveNext();
}
public void MoveNext()
{
levels[levels.Count - 1]++;
}
public string Current
{
get
{
return new string(' ', (levels.Count - 1) * 2)
+ string.Join(".", levels.Select(l => l.ToString()));
}
}
}
static partial class Program
{
static void Main()
{
var hg = new HierarchyGenerator();
Console.WriteLine(hg.Current); // 1
hg.DownOneLevel();
Console.WriteLine(hg.Current); // 1.1
hg.DownOneLevel();
Console.WriteLine(hg.Current); // 1.1.1
hg.MoveNext();
Console.WriteLine(hg.Current); // 1.1.2
hg.MoveNext();
Console.WriteLine(hg.Current); // 1.1.3
hg.UpLevels(1);
Console.WriteLine(hg.Current); // 1.2
hg.MoveNext();
Console.WriteLine(hg.Current); // 1.3
hg.UpLevels(1);
Console.WriteLine(hg.Current); // 2
hg.DownOneLevel();
Console.WriteLine(hg.Current); // 2.1
}
}
+0
謝謝蒂米,這正是我所需要的 – Cracker 2010-08-30 11:58:44
2
我假設你的層次表現就像一棵樹一樣使用這個類:
:
class Node {
public Node() { Children = new Node[0]; }
public String Name { get; set; }
public IEnumerable<Node> Children { get; set; }
}
然後,您可以使用此方法訪問樹中的每個節點該代碼將以深入的第一順序訪問樹中的每個節點,包括根。但是,根將有一個空的hierarchyId
。要開始訪問樹,請使用以下代碼:
Visit(
root,
new Stack<int>(),
(node, hierarchyId) => Console.WriteLine(hierarchyId + ": " + node.Name)
);
該操作將簡單地將節點名稱和生成的層次結構id寫入控制檯。
下面是一些樣本數據:
var root = new Node {
Name = "Root",
Children = new[] {
new Node {
Name = "A",
Children = new[] {
new Node {
Name = "AA",
Children = new [] {
new Node { Name = "AAA" },
new Node { Name = "AAB" },
new Node { Name = "AAC" }
}
},
new Node { Name = "AB" },
new Node { Name = "AC" }
}
},
new Node {
Name = "B",
Children = new Node[] {
new Node { Name = "BA" }
}
}
}
};
運行在這棵樹的代碼寫入以下控制檯:
: Root
1: A
1.1: AA
1.1.1: AAA
1.1.2: AAB
1.1.3: AAC
1.2: AB
1.3: AC
2: B
2.1: BA
相關問題
- 1. 創建一個層次樹
- 2. BitBucket Wiki:創建一個層次結構?
- 3. 創建N個層次
- 4. 如何創建一個層次結構菜單/圖標
- 5. 如何用C#創建一個對象菜單層次遞歸?
- 6. 如何SSAS創建一個層次時,在根
- 7. 如何創建此層次結構
- 8. 如何創建一個窗口通過一層到另一層
- 9. 如何創建一個條目ID
- 10. 如何讓simpleXML創建一個ID
- 11. 如何一次創建100個JButtons
- 12. 如何在JavaScript中使用2個一維數組創建層次結構樹?
- 13. 如何創建一個包含Java類層次結構的字典(使用Python)?
- 14. 如何使用多映射創建多個一對多對象層次
- 15. 如何創建一個閃亮的層次結構反應表和菜單
- 16. Django-tastypie創建一個URL層次結構
- 17. 創建一個自定義路由層次ASP.NET MVC 5
- 18. ASP.NET:GridView控件可以被用來創建一個層次?
- 19. 需要在C#中創建一個視覺層次結構圖
- 20. iPhone:創建一個基於層次結構的表導航
- 21. TCL lappend下面創建另一個層次
- 22. 如何根據行ID爲td元素創建一個id?
- 23. 如何誼建立一個多層次的組合框
- 24. 如何在MySQL中一個接一個地創建id
- 25. 如何在整個層次
- 26. 從逗號分隔的ID一次創建多個記錄
- 27. 如何一次更新多個ID
- 28. 層次ID,由孩子
- 29. 層次JSON與父ID
- 30. 如何在jQuery中創建一個動態創建元素的深層副本?
你只需要輸出現有的層次?大多數圖表已經具有層次結構,所以你的問題不是很清楚。 – Oded 2010-08-30 11:33:51
一些嵌套for循環或與某種停止條件配對的遞歸函數將爲您解決此問題。你應該詳細說明你的問題。提一下你會給出什麼樣的輸入(級別,停止條件?)以及如何格式化輸出(列表,空格分隔字符串,帶鏈接的html代碼?)。你會一次獲得一個價值嗎? –
2010-08-30 11:35:36
感謝您的回覆 只是我想生成這個ID爲每個新元素 我有一個父母的孩子關係,我需要用每個孩子的父母身份+孩子ID 假設父母身份是「1」所以我需要通過以下方式產生所有的孩子給這位家長 第一個孩子ID 1.1 第二個孩子ID 1.2 第三個孩子ID 1.3 和所有的孩子可能父母給其他孩子,假設冷杉孩子也有一個孩子,所以新的ID應如下 第一個孩子的ID應該是1.1.1 第二個孩子的ID應該是1.1.2 等等。 和輸入將是父母ID它可能是1或2或3 – Cracker 2010-08-30 11:44:35