zoukankan      html  css  js  c++  java
  • C# 一个数组集合,任意组合,不遗漏,不重复

    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace listTst
    {
        class Program
        {
            static void Main(string[] args)
            {
                var sw = Stopwatch.StartNew();
                var array = new List<Storage>()
                {
                    new Storage{ Id = 1, Name = "A" },
                    new Storage{ Id = 2, Name = "B" },
                    new Storage{ Id = 3, Name = "C" },
                    new Storage{ Id = 4, Name = "D" },
                    new Storage{ Id = 5, Name = "E" },
                    new Storage{ Id = 6, Name = "F" },
                    new Storage{ Id = 7, Name = "G" },
                    new Storage{ Id = 8, Name = "H" },
                    new Storage{ Id = 9, Name = "I" },
                };
    
                var result = new List<Group>();
                array.ForEach(a => { result.Add(new Group(a)); });
                for (int count = 2; count <= array.Count; count++)
                {
                    Test(result, array, 0, count);
                }
                sw.Stop();
    
                foreach (var group in result)
                {
                    Console.WriteLine(group.Name);
                }
                Console.WriteLine($"组合数量:{result.Count}");
                Console.WriteLine($"耗时:{sw.ElapsedMilliseconds}ms");
                Console.ReadLine();
            }
    
            static void Test(List<Group> result, List<Storage> array, int begin, int count)
            {
                var list = new List<Storage>();
                var end = begin + count - 1;
                if (end > array.Count) return;
                for (int i = begin; i < end; i++)
                {
                    list.Add(array[i]);
                }
                if (list.Count < count)
                {
                    for (int index = end; index < array.Count; index++)
                    {
                        var group = new Group(list);
                        group.Storages.Add(array[index]);
                        result.Add(group);
                    }
                }
    
                if (++begin < array.Count) Test(result, array, begin, count);
            }
    
            class Group
            {
                public Group(Storage storage)
                {
                    Storages.Add(storage);
                }
                public Group(List<Storage> list)
                {
                    Storages.AddRange(list);
                }
                public string Name => string.Concat(Storages.Select(a => a.Name));
                public List<Storage> Storages = new List<Storage>();
            }
    
            class Storage
            {
                public int Id { get; set; }
                public string Name { get; set; }
            }
        }
    }

  • 相关阅读:
    fetch()函数使用的一些技巧
    JavaScript(第三十三天)【总结:封装基础前端框架】
    JavaScript(第三十二天)【Ajax】
    JavaScript(第三十一天)【JSON】
    JavaScript(第三十天)【XPath】
    JavaScript(第二十九天)【js处理XML】
    JavaScript(第二十八天)【Cookie与存储】
    JavaScript(第二十七天)【错误处理与调试】
    JavaScript(第二十六天)【表单处理】
    JavaScript(第二十五天)【事件绑定及深入】
  • 原文地址:https://www.cnblogs.com/chxl800/p/11232616.html
Copyright © 2011-2022 走看看