从 CSharp 中的二维列表中删除重复条目
Remove Duplicate entries from a 2D list in CSharp
如何在 C# 中删除二维列表中的重复项。
这是我的代码。
HashSet<List<int>> set = new HashSet<List<int>>();
set.Add(new List<int>(){1,-2,-1,2});
set.Add(new List<int>(){3,-2,1,1});
set.Add(new List<int>() {1,-2,-1,2}); //duplicate entry
但是我从中得到的结果有重复条目 {{1,-2,-1,2},{3,-2,1,1},{1,-2,-1,2}}
我也尝试使用 set.Distinct().ToList()
但我的结果仍然重复。
请有人指点我使用 HashSet 完成这项工作的巧妙方法。我不想比较列表中的每个序列,因为这会增加我的代码的时间复杂度。
感谢您的期待帮助。
您可以创建 IEqualityComparer 的实现并将其传递给 Distinct 函数。
在您执行 IEqualityComparer 的过程中,对列表进行排序并检查是否存在例外(或相交),如果存在则两个列表不相等。
您还可以对每个列表做一个简单的循环,如果相同键的数量等于您的列表长度,则检查相同索引中的项目,然后消除其中的一个。
您可以编写自己的 IEqualityComparer<List<int>>
(and use a SequenceEqual
列表相等方法的实现)
public class ListComparer : IEqualityComparer<List<int>>
{
public bool Equals(List<int> x, List<int> y)
{
return x.SequenceEqual(y);
}
public int GetHashCode(List<int> obj)
{
return obj.Aggregate(19, (current, item) => current ^ item.GetHashCode());
}
}
然后将其实例传递给Distinct
方法
var set = new HashSet<List<int>>
{
new List<int>() {1, -2, -1, 2}, new List<int>() {3, -2, 1, 1}, new List<int>() {1, -2, -1, 2}
};
var result = set.Distinct(new ListComparer());
它允许您删除 {1,-2,-1,2}
重复的条目。
您还可以将 ListComparer
实例传递给 HashSet
构造函数并避免添加重复列表
var set = new HashSet<List<int>>(new ListComparer())
{
new List<int>() {1, -2, -1, 2}, new List<int>() {3, -2, 1, 1}, new List<int>() {1, -2, -1, 2}
};
在上面的例子中 set
将只包含两个没有重复列表的项目
如何在 C# 中删除二维列表中的重复项。 这是我的代码。
HashSet<List<int>> set = new HashSet<List<int>>();
set.Add(new List<int>(){1,-2,-1,2});
set.Add(new List<int>(){3,-2,1,1});
set.Add(new List<int>() {1,-2,-1,2}); //duplicate entry
但是我从中得到的结果有重复条目 {{1,-2,-1,2},{3,-2,1,1},{1,-2,-1,2}}
我也尝试使用 set.Distinct().ToList()
但我的结果仍然重复。
请有人指点我使用 HashSet 完成这项工作的巧妙方法。我不想比较列表中的每个序列,因为这会增加我的代码的时间复杂度。
感谢您的期待帮助。
您可以创建 IEqualityComparer 的实现并将其传递给 Distinct 函数。
在您执行 IEqualityComparer 的过程中,对列表进行排序并检查是否存在例外(或相交),如果存在则两个列表不相等。
您还可以对每个列表做一个简单的循环,如果相同键的数量等于您的列表长度,则检查相同索引中的项目,然后消除其中的一个。
您可以编写自己的 IEqualityComparer<List<int>>
(and use a SequenceEqual
列表相等方法的实现)
public class ListComparer : IEqualityComparer<List<int>>
{
public bool Equals(List<int> x, List<int> y)
{
return x.SequenceEqual(y);
}
public int GetHashCode(List<int> obj)
{
return obj.Aggregate(19, (current, item) => current ^ item.GetHashCode());
}
}
然后将其实例传递给Distinct
方法
var set = new HashSet<List<int>>
{
new List<int>() {1, -2, -1, 2}, new List<int>() {3, -2, 1, 1}, new List<int>() {1, -2, -1, 2}
};
var result = set.Distinct(new ListComparer());
它允许您删除 {1,-2,-1,2}
重复的条目。
您还可以将 ListComparer
实例传递给 HashSet
构造函数并避免添加重复列表
var set = new HashSet<List<int>>(new ListComparer())
{
new List<int>() {1, -2, -1, 2}, new List<int>() {3, -2, 1, 1}, new List<int>() {1, -2, -1, 2}
};
在上面的例子中 set
将只包含两个没有重复列表的项目