Пример #1
0
        private void PartitionChildren(VirtualFolder folder, Prefixer prefixer, int startfrom = 1)
        {
            for (var wordcount = startfrom;;)
            {
                var curwc  = wordcount;
                var groups = from i in folder.ChildItems.ToList()
                             let prefix = prefixer.GetWordPrefix(GetTitle(i), curwc)
                                          where !string.IsNullOrWhiteSpace(prefix)
                                          group i by prefix.ToLowerInvariant()
                                          into g
                                          let gcount = g.LongCount()
                                                           where gcount > 3
                                                       orderby g.LongCount() descending
                                                       select g;

                var longest = groups.FirstOrDefault();
                if (longest == null)
                {
                    if (wordcount++ > 5)
                    {
                        return;
                    }
                    continue;
                }

                var newfolder = new VirtualFolder(folder, longest.Key);
                foreach (var item in longest)
                {
                    folder.RemoveResource(item);
                    newfolder.AddResource(item);
                }

                if (newfolder.ChildCount > 100)
                {
                    PartitionChildren(newfolder, prefixer, wordcount + 1);
                }
                if (newfolder.ChildFolders.LongCount() == 1)
                {
                    foreach (var f in newfolder.ChildFolders.ToList())
                    {
                        folder.AdoptFolder(f);
                    }
                }
                else
                {
                    folder.AdoptFolder(newfolder);
                }
            }
        }
Пример #2
0
 private void PartitionChildren(VirtualFolder folder, Prefixer prefixer, int startfrom = 1)
 {
     for (var wordcount = startfrom;;) {
     var curwc = wordcount;
     var groups = from i in folder.ChildItems.ToList()
              let prefix = prefixer.GetWordPrefix(GetTitle(i), curwc)
              where !string.IsNullOrWhiteSpace(prefix)
              group i by prefix.ToLowerInvariant()
              into g
              let gcount = g.LongCount()
              where gcount > 3
              orderby g.LongCount() descending
              select g;
     var longest = groups.FirstOrDefault();
     if (longest == null) {
       if (wordcount++ > 5) {
     return;
       }
       continue;
     }
     var newfolder = new VirtualFolder(folder, longest.Key);
     foreach (var item in longest) {
       folder.RemoveResource(item);
       newfolder.AddResource(item);
     }
     if (newfolder.ChildCount > 100) {
       PartitionChildren(newfolder, prefixer, wordcount + 1);
     }
     if (newfolder.ChildFolders.LongCount() == 1) {
       foreach (var f in newfolder.ChildFolders.ToList()) {
     folder.AdoptFolder(f);
       }
     }
     else {
       folder.AdoptFolder(newfolder);
     }
       }
 }