在C#中删除2D列表的重复条目

时间:2019-07-14 07:20:34

标签: c# generic-list

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

我已经尝试使用answers中针对1D列表突出显示的.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();

上面的代码运行,但是没有任何变化。

我该如何进行这项工作?谢谢

2 个答案:

答案 0 :(得分:0)

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

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

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();
}

答案 1 :(得分:0)

您可以按如下所示的第一个和第二个元素使用Linq GroupBy和gruop:

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