示例#1
0
        internal static TreeItemHolder <T> Search <T>(TreeItemHolder <T> treeHolder, Func <T, string> getId, string idToSearch)
        {
            //如果不传入参数,搜索返回null
            if (string.IsNullOrEmpty(idToSearch))
            {
                return(null);
            }

            //是否是当前的树
            var id = getId(treeHolder.Value);

            if (idToSearch.NbEquals(id))
            {
                return(treeHolder);
            }

            //如果不是当前的树,递归向下查找
            if (!treeHolder.Children.IsNullOrEmpty())
            {
                return(treeHolder.Children.Select(item => Search(item, getId, idToSearch))
                       .FirstOrDefault());
            }

            //没有找到
            return(null);
        }
示例#2
0
 private void ShowTreeHolder(TreeItemHolder <MockTreeItem> holder)
 {
     Console.WriteLine(holder.Value);
     foreach (var childHolder in holder.Children)
     {
         ShowTreeHolder(childHolder);
     }
 }
示例#3
0
        public void ConvertToHolders_top_level_should_ok()
        {
            var perCount        = 2;
            var maxDeep         = 3;
            var mockTreeItems   = MockTreeItem.Create(perCount, maxDeep);
            var treeItemHolders = TreeItemHolder <MockTreeItem> .ConvertToHolders(mockTreeItems, item => item.Id, item => item.ParentId, null);

            ShowTreeHolders(treeItemHolders);

            treeItemHolders.Count.ShouldEqual(2);
        }
示例#4
0
        public void MaxDeep_should_ok()
        {
            var perCount        = 1;
            var maxDeep         = 4;
            var mockTreeItems   = MockTreeItem.Create(perCount, maxDeep);
            var treeItemHolders = TreeItemHolder <MockTreeItem> .ConvertToHolders(mockTreeItems, item => item.Id, item => item.ParentId, null);

            ShowTreeHolders(treeItemHolders);

            var treeItemHolder = treeItemHolders[0];

            treeItemHolder.MaxDeep().ShouldEqual(maxDeep);
        }
示例#5
0
        internal static TreeItemHolder <T> ConvertToHolder <T>(IList <T> treeItems, T currentItem, Func <T, string> getId, Func <T, string> getParentId)
        {
            var currentHolder = new TreeItemHolder <T>(currentItem);

            string currentId  = getId.Invoke(currentItem);
            var    childItems = treeItems.Where(x => getParentId(x).NbEquals(currentId)).ToList();

            foreach (var childItem in childItems)
            {
                var childHolder = ConvertToHolder(treeItems, childItem, getId, getParentId);
                currentHolder.Children.Add(childHolder);
            }

            return(currentHolder);
        }
示例#6
0
        public void Search_should_ok()
        {
            var perCount        = 2;
            var maxDeep         = 3;
            var mockTreeItems   = MockTreeItem.Create(perCount, maxDeep);
            var treeItemHolders = TreeItemHolder <MockTreeItem> .ConvertToHolders(mockTreeItems, item => item.Id, item => item.ParentId, null);

            ShowTreeHolders(treeItemHolders);
            var treeItemHolder = treeItemHolders[0];

            treeItemHolder.Search(item => item.Id, "NotExistId").ShouldNull("NotExistId");
            treeItemHolder.Search(item => item.Id, "1.").ShouldNotNull();
            treeItemHolder.Search(item => item.Id, "1.1.").ShouldNotNull();
            treeItemHolder.Search(item => item.Id, "1.1.1.").ShouldNotNull();
        }
示例#7
0
        public static IList <MockTreeItemTree> ConvertTrees(IList <MockTreeItem> items)
        {
            var trees = new List <MockTreeItemTree>();

            if (items.IsNullOrEmpty())
            {
                return(trees);
            }

            var holders = TreeItemHolder <MockTreeItem> .ConvertToHolders(items, item => item.Id, item => item.ParentId, null);

            foreach (var holder in holders)
            {
                var itemTree = holder.ConvertToTree(item => item.ToMapped <MockTreeItemTree>(), tree => tree.Children);
                trees.Add(itemTree);
            }
            return(trees);
        }
示例#8
0
        internal static TreeItemHolder <T> SearchChild <T>(TreeItemHolder <T> treeHolder, Func <T, string> getId, string idToSearch, bool recursive)
        {
            if (string.IsNullOrEmpty(idToSearch) || treeHolder == null || treeHolder.Children.IsNullOrEmpty())
            {
                return(null);
            }

            var theOne = treeHolder.Children.FirstOrDefault(item => idToSearch.NbEquals(getId(item.Value)));

            if (theOne != null)
            {
                return(theOne);
            }

            if (recursive)
            {
                return(treeHolder.Children.Select(childHolder =>
                                                  SearchChild(childHolder, getId, idToSearch, true))
                       .FirstOrDefault(theOne2 => theOne2 != null));
            }

            //没有找到
            return(null);
        }
示例#9
0
        public void ConvertToTree_should_ok()
        {
            var perCount        = 2;
            var maxDeep         = 3;
            var mockTreeItems   = MockTreeItem.Create(perCount, maxDeep);
            var treeItemHolders = TreeItemHolder <MockTreeItem> .ConvertToHolders(mockTreeItems, item => item.Id, item => item.ParentId, null);

            ShowTreeHolders(treeItemHolders);
            var treeItemHolder = treeItemHolders[0];

            var mockTreeItemTree = treeItemHolder.ConvertToTree(
                item => item.ToMapped <MockTreeItemTree>(),
                tree => tree.Children);

            AssertChildren(mockTreeItemTree, 1, perCount);
            foreach (var childTree in mockTreeItemTree.Children)
            {
                AssertChildren(childTree, 2, perCount);
                foreach (var childChildTree in childTree.Children)
                {
                    AssertChildren(childChildTree, 3, 0);
                }
            }
        }