使用Linq和C#在列表中创建所有可能的项目组合 [英] Create all possible combinations of items in a list using Linq and C#
本文介绍了使用Linq和C#在列表中创建所有可能的项目组合的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个类别表:
Catid | Desciption
1 | Color
2 | Size
3 | Material
还有一个类别项目表
Catid | Name
1 | Red
1 | Blue
1 | Green
2 | Small
2 | Med
2 l Large
3 | Cotton
3 | Silk
我需要遍历所有项目并将其显示在这样的标签中:
I need to loop through all the items and display them in a labels like this:
Red Small Cotton
Red Small Silk
Red Med Cotton
Red Med Silk
Red Large Cotton
Red Large Silk
Blue Small Cotton
Blue Small Silk
Blue Med Cotton
Blue Med Silk
Blue Large Cotton
Blue Large Silk
Green Small Cotton
Green Small Silk
Green Med Cotton
Green Med Silk
Green Large Cotton
Green Large Silk
请注意:可能有更多或更少的类别.这不是预先确定的.
有什么建议吗? 谢谢
推荐答案
var result = list.GroupBy(t => t.Id).CartesianProduct();
使用 Eric Lippert的博客中的笛卡尔产品扩展方法:
using the CartesianProduct Extension Method from Eric Lippert's Blog:
static IEnumerable<IEnumerable<T>> CartesianProduct<T>(
this IEnumerable<IEnumerable<T>> sequences)
{
IEnumerable<IEnumerable<T>> emptyProduct = new[] { Enumerable.Empty<T>() };
return sequences.Aggregate(
emptyProduct,
(accumulator, sequence) =>
from accseq in accumulator
from item in sequence
select accseq.Concat(new[] {item}));
}
示例:
var list = new[]
{
new { Id = 1, Description = "Red" },
new { Id = 1, Description = "Blue" },
new { Id = 1, Description = "Green" },
new { Id = 2, Description = "Small" },
new { Id = 2, Description = "Med" },
new { Id = 2, Description = "Large" },
new { Id = 3, Description = "Cotton" },
new { Id = 3, Description = "Silk" },
};
var result = list.GroupBy(t => t.Id).CartesianProduct();
foreach (var item in result)
{
Console.WriteLine(string.Join(" ", item.Select(x => x.Description)));
}
输出:
Red Small Cotton
Red Small Silk
Red Med Cotton
Red Med Silk
Red Large Cotton
Red Large Silk
Blue Small Cotton
Blue Small Silk
Blue Med Cotton
Blue Med Silk
Blue Large Cotton
Blue Large Silk
Green Small Cotton
Green Small Silk
Green Med Cotton
Green Med Silk
Green Large Cotton
Green Large Silk
这篇关于使用Linq和C#在列表中创建所有可能的项目组合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文