C# LINQ:如何压缩2个列表并选择第一个列表不同的元素?

C# LINQ:如何压缩2个列表并选择第一个列表不同的元素?,c#,linq,C#,Linq,我有两个值列表/数组,x和y。x列表中有重复项。我需要选择具有唯一x值的x和y元素。使用LINQ,我将如何编写查询以获取x和y的元素,其中x是唯一的?(我希望每个不同的x都有第一个y) 例如: x = {1, 1, 2, 3, 4, 4, 5, 6} y = {3, 4, 5, 6, 7, 8, 9, 10} 我想要的结果是: newX = {1, 2, 3, 4, 5, 6} newY = {3, 5, 6, 7, 9, 10} 您可以使用索引获取第一个x,然后查找y的索引 var x

我有两个值列表/数组,x和y。x列表中有重复项。我需要选择具有唯一x值的x和y元素。使用LINQ,我将如何编写查询以获取x和y的元素,其中x是唯一的?(我希望每个不同的x都有第一个y)

例如:

x = {1, 1, 2, 3, 4, 4, 5, 6}

y = {3, 4, 5, 6, 7, 8, 9, 10}
我想要的结果是:

newX = {1, 2, 3, 4, 5, 6}

newY = {3, 5, 6, 7, 9, 10}

您可以使用索引获取第一个x,然后查找y的索引

var xWithIndex = x.Select((value, index) => new { Value = value, Index = index })
         .GroupBy(item => item.Value)
         .Select(group => group.First())
var newX = xWithIndex.Select(item => item.Value).ToList();
var newY = xWithIndex.Select(item => y[item.Index]).ToList();

您可以使用索引获取第一个x,然后查找y的索引

var xWithIndex = x.Select((value, index) => new { Value = value, Index = index })
         .GroupBy(item => item.Value)
         .Select(group => group.First())
var newX = xWithIndex.Select(item => item.Value).ToList();
var newY = xWithIndex.Select(item => y[item.Index]).ToList();
如果您愿意添加,可以使用
DistinctBy

int[] x = { 1, 1, 2, 3, 4, 4, 5, 6 };
int[] y = { 3, 4, 5, 6, 7, 8, 9, 10 };

var result = x.Zip(y, (a,b) => new { x = a, y = b})
    .DistinctBy(z => z.x).ToList();

var xresult = result.Select(z => z.x);
var yresult = result.Select(z => z.y);

// Verify the results
Console.WriteLine(String.Join(",", xresult));
Console.WriteLine(String.Join(",", yresult));
如果您愿意添加,可以使用
DistinctBy

int[] x = { 1, 1, 2, 3, 4, 4, 5, 6 };
int[] y = { 3, 4, 5, 6, 7, 8, 9, 10 };

var result = x.Zip(y, (a,b) => new { x = a, y = b})
    .DistinctBy(z => z.x).ToList();

var xresult = result.Select(z => z.x);
var yresult = result.Select(z => z.y);

// Verify the results
Console.WriteLine(String.Join(",", xresult));
Console.WriteLine(String.Join(",", yresult));

压缩两个列表,按
x
分组,然后从每组中选择初始项,如下所示:

var pairs = x.Zip(y, (first, second) => new {X = first, Y = second})
    .GroupBy(i => i.X)
    .Select(g => g.First());
var newX = pairs.Select(p => p.X).ToList();
var newY = pairs.Select(p => p.Y).ToList();

压缩两个列表,按
x
分组,然后从每组中选择初始项,如下所示:

var pairs = x.Zip(y, (first, second) => new {X = first, Y = second})
    .GroupBy(i => i.X)
    .Select(g => g.First());
var newX = pairs.Select(p => p.X).ToList();
var newY = pairs.Select(p => p.Y).ToList();

您@usere345049的答案对您有用吗?您@usere345049的答案对您有用吗?