如何清除List<>中的元素它们在 c# 中彼此相似

发布于 2024-12-15 04:10:31 字数 56 浏览 0 评论 0 原文

我有一个列表,但在这个列表中有很多具有相同值的元素。我想清除具有相同值并且具有每个元素组之一的值。

I have a list but in this list there are lots of elements which have the same value. I want to clear values which have same value and have one of each element group.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

伪装你 2024-12-22 04:10:32

如果您尝试合并两个列表

您可以使用Union

List<int> results = lst1.Union(lst2).ToList();

您还可以使用 ConcatDistinct 来完成此操作:

List<int> lst3 = lst1.Concat(lst2).Distinct().ToList();

如果您尝试从一个对象列表中删除重复项

您可以使用 IEqualityComparer 不同

List<DataRow> results = lst1.Distinct(new RowComparer()).ToList();

public class RowComparer : IEqualityComparer<DataRow>
{
    public bool Equals(DataRow x, DataRow y) {
        return x.Field<int>("ID") == y.Field<int>("ID");
    }

    public int GetHashCode(DataRow obj) {
        return obj.Field<int>("ID").GetHashCode();
    }
}

如果您尝试合并多个对象列表并删除重复项

您可以将 UnionIEqualityComparer 结合使用。

List<DataRow> results = lst1.Union(lst2, new RowComparer()).ToList();

public class RowComparer : IEqualityComparer<DataRow>
{
    public bool Equals(DataRow x, DataRow y) {
        return x.Field<int>("ID") == y.Field<int>("ID");
    }

    public int GetHashCode(DataRow obj) {
        return obj.Field<int>("ID").GetHashCode();
    }
}

If you're trying to merge two lists

You can use Union.

List<int> results = lst1.Union(lst2).ToList();

You could also use Concat and Distinct to accomplish this:

List<int> lst3 = lst1.Concat(lst2).Distinct().ToList();

If you're trying to remove duplicates from one list of objects

You can use Distinct with an IEqualityComparer<>.

List<DataRow> results = lst1.Distinct(new RowComparer()).ToList();

public class RowComparer : IEqualityComparer<DataRow>
{
    public bool Equals(DataRow x, DataRow y) {
        return x.Field<int>("ID") == y.Field<int>("ID");
    }

    public int GetHashCode(DataRow obj) {
        return obj.Field<int>("ID").GetHashCode();
    }
}

If you're trying to merge multiple lists of objects and remove duplicates

You can use Union with an IEqualityComparer<>.

List<DataRow> results = lst1.Union(lst2, new RowComparer()).ToList();

public class RowComparer : IEqualityComparer<DataRow>
{
    public bool Equals(DataRow x, DataRow y) {
        return x.Field<int>("ID") == y.Field<int>("ID");
    }

    public int GetHashCode(DataRow obj) {
        return obj.Field<int>("ID").GetHashCode();
    }
}
药祭#氼 2024-12-22 04:10:31

如果您使用的是 3.5+,则可以使用 Linq 来完成此操作:

myDistinctList = myList.Distinct();

这假设列表值是一个基元或实现 IComparable 的对象。

If you are using 3.5+ you can use Linq to accomplish that:

myDistinctList = myList.Distinct();

This assumes that the list value is a primitive or an object that implements IComparable.

半仙 2024-12-22 04:10:31

你可以将它们放入一个集合中,只要你声明了 #equals 来进行正确的比较,就可以强制执行唯一性。

you could put them into a set, which enforces uniqueness, as long as you have #equals declared for correct comparison.

葮薆情 2024-12-22 04:10:31

在 C# 4.0 中使用 Distinct 扩展方法:

var values=new List<Type>;
var result=result.Distict().ToList();
return result;

更新:
如果您的类型是引用类型,请使用:

result.Distict(IEqualityComparer<Type>)

In C# 4.0 use Distinct extension method:

var values=new List<Type>;
var result=result.Distict().ToList();
return result;

Update:
if your type is reference type use:

result.Distict(IEqualityComparer<Type>)
天冷不及心凉 2024-12-22 04:10:31

您可以使用 linq

  • 删除重复项:.Distinct()
  • 组:。分组依据()

You could use linq :

  • Remove duplicate : .Distinct()
  • Group : .GroupBy()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文