• 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; }
            }
        }
    }

  • 相关阅读:
    legend3---videojs存储视频的播放速率便于用户观看视频
    legend3---mathjax的动态渲染问题解决
    matplotlib库疑难问题---10、画直方图
    matplotlib库疑难问题---9、画箭头(综合实例)
    js释放图片资源
    javascript中的原型与原型链
    前端跨域方式
    matplotlib清除 axes 和 figure
    matplotlib画直方图细解
    CentOS 7.8 安装 Python 3.8.5
  • 原文地址:https://www.cnblogs.com/chxl800/p/11232616.html
Copyright © 2020-2023  润新知