使用Linq和C#创建列表中项目的所有可能组合

使用Linq和C#创建列表中项目的所有可能组合,第1张

概述我有一个类别表: 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 我需要遍历所有项目并将其显示在这样的标签中: Red Small 我有一个类别表:
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

我需要遍历所有项目并将其显示在这样的标签中:

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’s Blog CartesianProduct Extension Method:

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"   },Description = "Green"  },new { ID = 2,Description = "Small"  },Description = "Med"    },Description = "Large"  },new { ID = 3,Description = "Cotton" },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 CottonRed Small SilkRed Med CottonRed Med SilkRed Large CottonRed Large SilkBlue Small CottonBlue Small SilkBlue Med CottonBlue Med SilkBlue Large CottonBlue Large SilkGreen Small CottonGreen Small SilkGreen Med CottonGreen Med SilkGreen Large CottonGreen Large Silk
总结

以上是内存溢出为你收集整理的使用Linq和C#创建列表中项目的所有可能组合全部内容,希望文章能够帮你解决使用Linq和C#创建列表中项目的所有可能组合所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1242341.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存