C# 实现Tree,包含parentId和children

1.先定义一个类型

  public class Node
    {
        [JsonProperty(PropertyName = "id", NullValueHandling = NullValueHandling.Ignore)]
        public string id { get; set; }

        [JsonProperty(PropertyName = "text", NullValueHandling = NullValueHandling.Ignore)]
        public string Text { get; set; }

        [JsonProperty(PropertyName = "checked", NullValueHandling = NullValueHandling.Ignore)]
        public bool Checked { get; set; }

        [JsonProperty(PropertyName = "children", NullValueHandling = NullValueHandling.Ignore)]
        public IList<Node> Children { get; set; }

        [JsonProperty(PropertyName = "parentId", NullValueHandling = NullValueHandling.Ignore)]
        public string ParentId { get; set; }
    }

2.数据源,我们从数据库查出来一般是以下这样的数据

IList<Node> treeList = new List<Node>();
treeList.Add(
new Node { Id = "f31a347e4be70da6d925bfaddf0e896b", Text = "商务经典", ParentId = "0" }); treeList.Add(new Node { Id = "b50d381e694c0227242ff7b55685178c", Text = "LZ01", ParentId = "f31a347e4be70da6d925bfaddf0e896b" }); treeList.Add(new Node { Id = "a921c809276dadf00bd45dd527564f02", Text = "休闲时光", ParentId = "0" }); treeList.Add(new Node { Id = "1bf52435e4f0af478dc9137ca7719fbb", Text = "XX01", ParentId = "a921c809276dadf00bd45dd527564f02" }); treeList.Add(new Node { Id = "ee43cc1ceb57a3793c5c11d6d632fd22", Text = "摩登时代", ParentId = "0" }); treeList.Add(new Node { Id = "fb9a268c6061d962dbb5fc5f55c803f8", Text = "MD01", ParentId = "ee43cc1ceb57a3793c5c11d6d632fd22" });

3.递归初始化树

      /// <summary>
        /// 递归初始化树
        /// </summary>
        /// <param name="nodes">结果</param>
        /// <param name="parentID">父ID</param>
        /// <param name="sources">数据源</param>
        private void InitTree(IList<Node> nodes, string parentID, IList<Node> sources)
        {
            Node tempNode;
            //递归寻找子节点  
            var tempTree = sources.Where(item => item.ParentId == parentID).ToList();
            foreach (Node row in tempTree)
            {
                tempNode = new Node()
                {
                    Id = row.Id,
                    Text = row.Text,
                    ParentId = row.ParentId,
                    Children = new List<Node>()
                };
                nodes.Add(tempNode);
                InitTree(tempNode.Children, row.Id, sources);
            }
        }

4.调用得到结果

 var tree = new List<Node>();
 InitTree(tree, "0", treeList);
 string json = JsonConvert.SerializeObject(tree);

//得到结果:[{"id":"f31a347e4be70da6d925bfaddf0e896b","text":"商务经典","checked":false,"children":[{"id":"b50d381e694c0227242ff7b55685178c","text":"LZ01","checked":false,"children":[],"parentId":"f31a347e4be70da6d925bfaddf0e896b"}],"parentId":"0"},{"id":"a921c809276dadf00bd45dd527564f02","text":"休闲时光","checked":false,"children":[{"id":"1bf52435e4f0af478dc9137ca7719fbb","text":"XX01","checked":false,"children":[],"parentId":"a921c809276dadf00bd45dd527564f02"}],"parentId":"0"},{"id":"ee43cc1ceb57a3793c5c11d6d632fd22","text":"摩登时代","checked":false,"children":[{"id":"fb9a268c6061d962dbb5fc5f55c803f8","text":"MD01","checked":false,"children":[],"parentId":"ee43cc1ceb57a3793c5c11d6d632fd22"}],"parentId":"0"}]

 

转载于:https://www.cnblogs.com/ycdx2001/p/4675914.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现一组数据的根据idparentid进行分组查询,可以使用Java编程语言来实现。 首先,我们需要一个数据结构来表示每个数据项。可以创建一个类,包含idparentid和其他必要的属性。例如: ```java public class DataItem { private int id; private int parentId; // other properties public DataItem(int id, int parentId) { this.id = id; this.parentId = parentId; // initialize other properties } // getters and setters } ``` 然后,我们需要将所有数据项存储在一个集合中。以ArrayList为例: ```java List<DataItem> dataList = new ArrayList<>(); dataList.add(new DataItem(1, 0)); dataList.add(new DataItem(2, 1)); dataList.add(new DataItem(3, 1)); dataList.add(new DataItem(4, 2)); // 添加更多数据项 ``` 接下来,我们可以使用Map来实现分组查询,其中key是parentId,value是属于该parentId的数据项的列表。循环遍历数据项集合,根据parentid将数据项放入对应的列表中。 ```java Map<Integer, List<DataItem>> groupedData = new HashMap<>(); for (DataItem dataItem : dataList) { int parentId = dataItem.getParentId(); if (!groupedData.containsKey(parentId)) { groupedData.put(parentId, new ArrayList<>()); } groupedData.get(parentId).add(dataItem); } ``` 现在,我们可以根据parentid来查询分组后的数据项。例如,查询parentId为1的数据项: ```java List<DataItem> group1 = groupedData.get(1); for (DataItem dataItem : group1) { System.out.println(dataItem.getId()); } ``` 通过以上步骤,我们可以实现基于idparentid的数据项分组查询。需要注意的是,以上代码片段仅作为示例,请根据实际情况进行必要修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值