13

私はデータ構造のリストを持っています:

        public List<Personal> Personals()
        {
            return new List<Personal>
                {
                    new Personal
                        {
                            Id = 0,
                            Name = "Name 0"
                        },
                    new Personal
                        {
                            Id = 1,
                            Name = "Name 1",
                            ParentId = 0
                        },
                    new Personal
                        {
                            Id = 2,
                            Name = "Name 2",
                            ParentId = 0
                        },
                    new Personal
                        {
                            Id = 3,
                            Name = "Name 3",
                            ParentId = 0
                        },
                    new Personal
                        {
                            Id = 4,
                            Name = "Name 4",
                            ParentId = 1
                        },
                    new Personal
                        {
                            Id = 5,
                            Name = "Name 5",
                            ParentId = 1
                        },
                    new Personal
                        {
                            Id = 6,
                            Name = "Name 6",
                            ParentId = 2
                        },
                    new Personal
                        {
                            Id = 7,
                            Name = "Name 7",
                            ParentId = 2
                        },
                    new Personal
                        {
                            Id = 8,
                            Name = "Name 8",
                            ParentId = 4
                        },
                    new Personal
                        {
                            Id = 9,
                            Name = "Name 9",
                            ParentId = 4
                        },
                };
        }

そして、私はツリーを構築したい:

public List<Tree> Trees()
            {
                return new List<Tree>
                    {
                        new Tree
                            {
                                Id = 0,
                                Name = "Name 0",
                                List = new List<Tree>
                                    {
                                        new Tree
                                            {
                                                Id = 1,
                                                Name = "Name 1",
                                                List = new List<Tree>
                                                    {
                                                        new Tree
                                                            {
                                                                Id = 4,
                                                                Name = "Name 4"
                                                            },
                                                        new Tree
                                                            {
                                                                Id = 5,
                                                                Name = "Name 5"
                                                            }
                                                    }
                                            }
                                    }
                            }
                    };
            }

LinQ to object でツリーを構築するにはどうすればよいですか? 使用する必要がありますが、正確には機能しません。以下を参照してください。

public List<Tree> GetTree(List<Personal> list)
        {
            var listFormat = list.Select(x => new Tree
                {
                    Id = x.Id,
                    Name = x.Name,
                    ParentId = x.ParentId
                }).ToList();

            var lookup = listFormat.ToLookup(f => f.ParentId);
            foreach (var tree in listFormat)
            {
                tree.List = lookup[tree.Id].ToList();
            }

            return listFormat;
        }
4

2 に答える 2