在分层列表中查找项目

时间:2015-03-03 08:50:28

标签: c# algorithm search

在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;  
        }

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

3 个答案:

答案 0 :(得分:1)

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

任何tree-traversal算法都可以找到所有根级目录,例如:

  1. 等级顺序(BFS)
  2. 订单/预订(DFS的变种)

答案 1 :(得分:1)

如果你想找到嵌套的项目你可以使用递归,如果你在项目的名称之后搜索

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);
    }
}

答案 2 :(得分:1)

您还可以将树结构展平为一个列表,然后使用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。

相关问题