在 C# 中删除二维列表的重复条目

Remove duplicate entries for 2D List in C#

我正在尝试从此二维列表中删除示例重复项。

我已经尝试使用 answers 中突出显示的 .Distinct().ToList() 方法来处理一维列表,但它似乎对我不起作用。

到目前为止我的代码:

List<List<float>> xyvertices = new List<List<float>>();
xyvertices.Add(new List<float>());
yvertices[0].Add(2);
xyvertices[0].Add(4);

for (int a = 1; a < 6; a++)
{
    xyvertices.Add(new List<float>());
    xyvertices[a].Add(a+1);
    xyvertices[a].Add(a+3);
}
xyvertices = xyvertices.Distinct().ToList();
Console.WriteLine("count:" + xyvertices.Count + "\n");

for (int i =0; i<xyvertices.Count; i++)
{
    Console.WriteLine(xyvertices[i][0]);
    Console.WriteLine(xyvertices[i][1]);
    Console.WriteLine();
}

Console.ReadLine();

以上代码运行但没有任何变化。

我怎样才能完成这项工作?谢谢

Distinct 正在比较 List,由于前两个列表不同,即使它们包含相同的两个数字,它们也不相等。

您的外部列表是 x,y 对的列表,因此您可以使用元组,而不是将它们编码为任意的浮点列表。例如:

List<(float, float)> xyvertices = new List<(float, float)>();
xyvertices.Add((2, 4));
for (int a = 1; a < 6; a++)
{
    xyvertices.Add((a+1,a+3));
}

xyvertices = xyvertices.Distinct().ToList();
Console.WriteLine("count:" + xyvertices.Count + "\n");
for (int i = 0; i < xyvertices.Count; i++)
{
    Console.WriteLine(xyvertices[i]);
    Console.WriteLine();
}

您可以使用 Linq Group By 并按第一个和第二个元素分组,如下所示:

xyvertices = xyvertices.GroupBy(x=>new {first= x[0],second= x[1] })
            .Select(x=>new List<float> { x.Key.first, x.Key.second })
            .ToList();

输出:

count:5

2
4

3
5

4
6

5
7

6
8