繁体   English   中英

在分层列表中查找项目

[英]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;  
        }

在这种情况下,从这种分层列表中找出项目的更好方法是什么。

您的数据结构实际上是一个有向树。

任何树遍历算法都可以查找所有根级目录,例如:

  1. 等级订单(BFS)
  2. 订单/预订(DFS的变体)

如果要查找嵌套的项目,可以使用递归,如果要搜索项目的名称,则可以使用

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM