可以實現通過調用打印方法遞歸地向它提供的項目的子集打印和深度迄今爲止印製的樹。我修改了你的類以包含一個Length
屬性,以便調用者不必總是假設它是6.另外我添加了一個構造函數來使我的初始化變得容易。在你的代碼中可能沒有意義。
public class HeaderItem
{
public HeaderItem(string headers)
{
_headers = headers.ToCharArray().Select(x => x.ToString()).ToArray();
}
private string[] _headers = new string[6];
public int Length
{
get { return _headers.Length; }
}
//...
}
這是打印方法。看看它是如何做的分組,然後遞歸調用自己:
private static void PrintHeaders(IEnumerable<HeaderItem> headerItems, int depth = 0)
{
var result =
headerItems.Where(h => h.Length > depth)
.GroupBy(h => h[depth], h => h,
(k, g) => new {Key = k, Items = g})
.OrderBy(g => g.Key);
foreach (var pair in result)
{
Console.Write(new string('.', depth)); // change here to add more dots
Console.WriteLine(pair.Key);
PrintHeaders(pair.Items, depth + 1);
}
}
這是你可以開始調用它:
PrintHeaders(_headerItems);
爲了進行測試,這是我的Main
方法:
static void Main(string[] args)
{
_headerItems.Add(new HeaderItem("abc"));
_headerItems.Add(new HeaderItem("abd"));
_headerItems.Add(new HeaderItem("acd"));
_headerItems.Add(new HeaderItem("ace"));
_headerItems.Add(new HeaderItem("bce"));
_headerItems.Add(new HeaderItem("bcd"));
_headerItems.Add(new HeaderItem("bef"));
PrintHeaders(_headerItems);
Console.ReadLine();
}
這就是結果:
a
.b
..c
..d
.c
..d
..e
b
.c
..d
..e
.e
..f
你達人。感謝那個,發現我的朋友。 – 2013-05-11 04:11:51