gpt4 book ai didi

c# - 测试多个列表中是否存在的 Linq 查询

转载 作者:太空宇宙 更新时间:2023-11-03 18:06:49 24 4
gpt4 key购买 nike

我有类似下面的数据结构

var blueList = new []
{
new { Id = 1, Value = 1000 },
new { Id = 2, Value = 1300 },
new { Id = 3, Value = 1500 },
new { Id = 5, Value = 2100 }
}.ToList();

var redList = new []
{
new { Id = 1, Value = 600 },
new { Id = 3, Value = 950 },
new { Id = 4, Value = 1100 },
new { Id = 5, Value = 1300 }
}.ToList();

var greenList = new []
{
new { Id = 1, Value = 50 },
new { Id = 2, Value = 180 },
new { Id = 3, Value = 270 },
new { Id = 4, Value = 430 },
new { Id = 5, Value = 510 }
}.ToList();

var colourList = new [] { blueList, redList, greenList }.ToList();

colourList 也可以包含任意数量的元素,它们只是恰好在这个特定实例中被命名。

我如何构造一个 linq 查询,它会给我一个新列表,其中只包含列表中所有组中的“Id”?

以下结果排除了 Id = 2,因为它不在 redList 中,而 Id = 4,因为它不在 blueList 中。这就是我所追求的。

var result = new []
{
new { Id = 1, Values = new [] { 1000, 600, 50 } },
new { Id = 3, Values = new [] { 1500, 950, 270 } },
new { Id = 5, Values = new [] { 2100, 1300, 510 } }
};

有什么建议吗?

最佳答案

简单:

var query = 
colourList
.Select(xs => xs.Select(x => new
{
Id = x.Id,
Values = Enumerable.Repeat(x.Value, 1),
}))
.Aggregate((xs, vs) =>
from x in xs
join v in vs on x.Id equals v.Id
select new
{
Id = x.Id,
Values = x.Values.Concat(v.Values),
});

我在您的样本数据上得到了这个结果:

result

当然,您可以扩展 colorList 以包含任意数量的子列表。

关于c# - 测试多个列表中是否存在的 Linq 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26984230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com