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; }
}
}
}
C# 一个数组集合,任意组合,不遗漏,不重复
点赞
收藏