在 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
我正在尝试从此二维列表中删除示例重复项。
我已经尝试使用 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