这有点混乱,但它很快就可以满足您的需求。首先创建一个类来保存每个 uniqe 域及其 URL:
public class ShortLink
{
public string DomainName { get; set; }
public List<string> UrlList;
public ShortLink(string domainName)
{
DomainName = domainName;
UrlList = new List<string>();
}
public void AddUrl(string url)
{
if(!UrlList.Contains(url))
UrlList.Add(url);
}
public string GetFullUrl(int indexOfUrlInList)
{
return DomainName + "/" + UrlList[indexOfUrlInList];
}
//Add other methods like remove and stuff
}
假设你的表单有一个名为treeView1的treview,那么试试下面的代码:
public partial class Form1 : Form
{
private List<string> _links = new List<string>(new []{
"bit.ly/sh125ad",
"adf.ly/sh1d5ad",
"bit.ly/sh1d5ad",
"adf.ly/sh125ad",
"adf.ly/sh12had"
});
private List<ShortLink> _shortLinks = new List<ShortLink>();
public Form1()
{
InitializeComponent();
PopulateTreeView();
}
private void PopulateTreeView()
{
//Make the dictionary
foreach (var link in _links)
{
var parts = link.Split('/');
var domainPart = parts[0];
if (!_shortLinks.Contains(_shortLinks.FirstOrDefault(x => x.DomainName == domainPart)))
{
var shortLink = new ShortLink(domainPart);
_shortLinks.Add(shortLink);
}
}
foreach (var link in _links)
{
var parts = link.Split('/');
var domainPart = parts[0];
var urlPart = parts[1];
//find a ShortLink in the list we made that matches this domainpart
var shortLink = _shortLinks.FirstOrDefault(x => x.DomainName == domainPart);
//if its not null, we add the url part to taht!
if(shortLink != null)
shortLink.AddUrl(urlPart);
//now we have all domains and parts
}
//Populate treeview
foreach (var shortLink in _shortLinks)
{
var parentNode = new TreeNode(shortLink.DomainName);
var childNodes = new List<TreeNode>();
//add all the links in the current shortLink to the list of treenodes
foreach (var link in shortLink.UrlList)
{
childNodes.Add(new TreeNode(link));
}
//now time to add child notes to parent node
parentNode.Nodes.AddRange(childNodes.ToArray());
treeView1.Nodes.Add(parentNode);
}
}
}
更新
我刚刚意识到您的问题实际上是关于查找父节点。请看下面的方法:
private void AddToTreeView(string domain, string link)
{
foreach (TreeNode node in treeView1.Nodes)
{
if (node.Text == domain)
{
node.Nodes.Add(link);
}
}
}
当然,您可以在 foreach 循环中创建 Node 时创建完整的节点详细信息。您可以为每个节点设置Name和Tag等字段以供进一步使用!
您还可以将TreeNode 子类化并为其添加自己的自定义字段。