在C#中如何List去除重复元素?

在C#中如何List去除重复元素?List中有两个一样的元素,想把两个都去除,用remove和removeall都不行,list中是对象,distinct好像也不太好使,还请各位帮忙解答一下。代码片段如下:classEdge{publicPointFstart;publicPointFend;}privateList<Edge>…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

List中有两个一样的元素,想把两个都去除,用remove和removeall都不行,list中是对象,distinct好像也不太好使,还请各位帮忙解答一下。
代码片段如下:
    class Edge
    {

        public PointF start;
        public PointF end;
    }

    private List<Edge> edges = new List<Edge>();

经过计算后edges中有一些edge对象,有些对象是相同的线段,但是首尾可能相反,如何判断是相同的线段,并且将两个相同的都删除?

下面这种试下

List<User> nonDuplicateList1 = users.Distinct().ToList();//通过User类的Equals实现去重

class User:IEquatable<User>//继承IEquatable接口,实现Equals方法。List就可以使用Distinct去重 

    public string name { get; set; } 
    string address; 

    public User(string _name, string _address) 
    { 
        name = _name; 
        address = _address; 
    } 

    public override string ToString() 
    { 
        return string.Format(“name:{0},\taddress:{1}”, name, address); 
    } 

    public bool Equals(User other) 
    { 
        return this.name == other.name; 
    } 
    public override int GetHashCode() 
    { 
        return name.GetHashCode(); 
    } 
}
1.用GroupBy分组取第一条,实现去重,edges = edges.GroupBy(****).Select(x => x.First()).ToLust()
2.括号里是分组条件,这是一个对象分组new { a = x.start, b = x.end  },用三元表达式解决你说的头尾
小蜜蜂论坛回帖机倒装的情形

/// <summary>
    /// 可枚举类型扩展;
    /// </summary>
    public static class EnumerableExtensions
    {

        /// <summary>
        /// 按指定字段排除重复项;
        /// https://www.cnblogs.com/niuzaihenmang/p/5620915.html
        /// 示例:peopleList.DistinctBy(i => new { i.UserName }).ToList();
        /// </summary>
        /// <typeparam name=”TSource”></typeparam>
        /// <typeparam name=”Tkey”></typeparam>
        /// <param name=”source”></param>
        /// <param name=”keySelector”></param>
        /// <returns></returns>
        public static IEnumerable<TSource> DistinctBy<TSource, Tkey>(this IEnumerable<TSource> source, Func<TSource, Tkey> keySelector)
        {

            HashSet<Tkey> hashSet = new HashSet<Tkey>();
            foreach (TSource item in source)
            {

                if (hashSet.Add(keySelector(item)))
                {

                    yield return item;
                }
            }
        }
    }

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231307.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 文件句柄和文件句柄泄漏解决「建议收藏」

    文件句柄和文件句柄泄漏解决「建议收藏」文件句柄在文件I/O中,要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名,并选一个到该文件的路径来打开文件。该函数取回一个顺序号,即文件句柄(filehandle),该文件句柄对于打开的文件是唯一的识别依据。要从文件中读取一块数据,应用程序需要调用函数readFile,并将文件句柄在内存中的地址和要拷贝的字节数传送给操作系统。当完成任务后,再通过调用系统函数来关闭该文件。…

    2022年10月17日
    3
  • pycharm 如何安装包

    pycharm 如何安装包pycharm如何安装包点开文件-设置找到自己的项目,底下的ProjectInterpreter,就包含了已安装的包如果没有看到想要的包,那么点开旁边的“+”搜索想要安装的包,这里拿"numpy"为例,点installpackage最后检查一下里面有没有安装上输入如下代码:importnumpyasnyprintnp.version.version检查…

    2022年5月17日
    63
  • Matlab读取txt数据的实用方法[通俗易懂]

    Matlab读取txt数据的实用方法[通俗易懂]需求有个朋友需要我帮忙写个matlab脚本读取100个txt文档的实验数据,这些文档的结构相同,分为四列,从第一列到第四列依次是时间、位置、速度、加速度。读取完数据之后需要对数据进行处理,具体的处理方式是:提取以0.002为采样周期的数据,分类存储起来。文件内容是这样的:技术难点技术难点在于,这些文件中的数据是从一个软件中仿真得到的,由于采用的是变步长仿真,因此采样时间不统一,很难采用对…

    2025年9月22日
    7
  • Spring Boot教程(十三):Spring Boot文件上传「建议收藏」

    Spring Boot教程(十三):Spring Boot文件上传「建议收藏」一、创建一个简单的包含WEB依赖的SpringBoot项目pom.xml内容:&lt;!–SpringBootweb启动器–&gt;&lt;dependency&gt;&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;&lt;artifactId&gt;spring-boot-starter-…

    2022年6月14日
    39
  • LAMP环境搭建

    LAMP环境搭建

    2021年9月22日
    41
  • Swift4 String截取字符串

    Swift4 String截取字符串varstr1="AlexanderYeah";//1截取字符串的第一种方式//prefix截取前3个字符串varstr2=str1.prefix(3);print(str2);//suffix截取后3个字符串varstr3=str1.suffix(3);print(str3);//2截取一个范围的字符串//从0开始到倒数第二位结…

    2022年5月12日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号