[英]Find an item in the hierarchical list
在DirectoryItem类型列表中查找和项目的有效方法是什么 -
List<DirectoryItem> lstRootDirectory = GetAllRootLevelDirectories();
每个DirectoryItem都有一个Items(相同类型的目录 - DirectoryItem),DirectoryItem是一个结构如下:
struct DirectoryItem
{
public string AbsolutePath { get { return string.Format("{0}/{1}", BaseUri, Name); } }
public bool IsDirectory;
public string Name;
public List<DirectoryItem> Items;
}
在这种情况下,从这种分层列表中找出项目的更好方法是什么。
如果要查找嵌套的项目,可以使用递归,如果要搜索项目的名称,则可以使用
private void searchAll(DirectoryItem root, string name)
{
for (int a = 0; a < root.Items.Count; a++)
{
if (name == root.Items[a].Name)
{
//
}
searchAll(root.Items[a], name);
}
}
您还可以将树结构展平为列表,然后使用Linq在列表中进行搜索。
创建扩展方法:
public static IEnumerable<T> Flatten<T>(this IEnumerable<T> e, Func<T, IEnumerable<T>> f)
{
return e.SelectMany(c => f(c).Flatten(f)).Concat(e);
}
使用扩展方法:
IEnumerable<DirectoryItem> allDirectories = lstRootDirectory.Flatten(d => d.Items).ToList();
现在执行LINQ以查找DirectoryItem。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.