如何使用 LINQ 获得某些字段不同的组合
我需要一个 LINQ 查询来获取以下结构的所有组合(按名称区分):
var keys = new[]
{
new { Name = "A", Value = "1" },
new { Name = "A", Value = "2" },
new { Name = "B", Value = "3" },
new { Name = "B", Value = "4" },
// etc
};
我需要获取:
{A1, B3} {A1, B4} {A2, B3} {A2, B4} // etc
其中 A1-B4 我的意思是整个项目: { Name = "...", Value = ". .." }
源数组不仅可以包含 A 和 B 元素。例如,如果我们添加项目 { Name = "C", Value = "5" }
输出结果项目应包含 3 个元素,例如 {A1, B3, C5}
。
谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
该问题有多个步骤:
这是一个实现:
现在您已经完成了。请注意如何进行笛卡尔积的一般模式,其中我们同时从两个枚举中进行选择。
编辑:
如果您想要做的是所有名称列表上的笛卡尔积,请使用 此片段来自埃里克·利珀特。一旦你有了这个,你就可以像这样使用它:
This problem has multiple steps:
And here is an implementation:
And there you have it. Notice the general pattern of how to do a cartesian product, where we select form two enumerations at once.
EDIT:
If what you want to do is a cartesian product on all name lists, then use this snippet from Eric Lippert. Once you have this, you can use it like so:
尝试这样的事情:
Try something like this:
如果您想使用 Linq,请查看 Join 运算符并在其中破解您自己的比较器。
在此比较器中,您可以匹配键和值不同的项目。
If you wanna use Linq, then look at the Join operator and hack your own comparer in it.
Within this comparer, you can match items where both the Key and Value are different.
这将得到所有组合,包括 {B3, A1} 等。
This will get all combinations including {B3, A1}, etc.