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