我正在尝试从此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();
上面的代码运行,但是没有任何变化。
我该如何进行这项工作?谢谢
答案 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