今天在开发过程,遇到一个统计树各子节点数目的功能,开动脑筋 搞定,后面又有一个统计各子节点并去除重复节点的功能,百思不得其解,后来在同事的帮组下解决,现把代码记录在这里,让自己以后继续读到,加深理解,经常复习可能会有新的收获。
一、统计树各子节点数目代码
/// <summary>
/// 计数
/// </summary>
/// <param name="treeView"></param>
public void countTreeView(TreeView treeView)
{
try
{
if (treeView == null)
{
return;
}
int count = 0;
DgCount(treeView.Nodes, ref count);
}
catch (Exception)
{
}
}
private void DgCount(TreeNodeCollection nodes, ref int count)
{
foreach (TreeNode node in nodes)
{
if ("dir".Equals(node.Tag.ToString()))
{
int childCount = 0;
DgCount(node.Nodes, ref childCount);
node.Text = node.Text + "(" + childCount + ")";
count += childCount;
}
else
{
count++;
}
}
}
二、下面是去除重复结果的代码
public void countTreeView_certificate(TreeView treeView)
{
try
{
if (treeView == null)
{
return;
}
List<string> lst = new List<string>();
DgCount_certificate(treeView.Nodes,ref lst);
}
catch (Exception)
{
}
}
private void DgCount_certificate(TreeNodeCollection nodes,ref List<string> lst)
{
foreach (TreeNode node in nodes)
{
if ("dir".Equals(node.Tag.ToString())) {
List<string> childLst = new List<string>();
DgCount_certificate(node.Nodes,ref childLst);
childLst = Func.DelRepeatData(childLst.ToArray());
if (childLst == null)
{
childLst = new List<string>();
}
node.Text = node.Text + "(" + childLst.Count + ")";
lst.AddRange(childLst);
}
else if(!lst.Contains(node.Text))
{
lst.Add(node.Text);
}
}
}
#region 移除数组中重复数据
/// <summary>
/// 移除数组中重复数据
/// </summary>
/// <param name="array">需要除重的数组</param>
/// <returns>不重复数组</returns>
public static List<string> DelRepeatData(string[] array)
{
List<string> listString = new List<string>();
foreach (string eachString in array)
{
if (!listString.Contains(eachString))
listString.Add(eachString);
}
return listString;
}
#endregion