在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;
                }
            }
        }
    }

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 阶段小结

    阶段小结

  • MySQL中使用LIMIT进行分页的方法

    MySQL中使用LIMIT进行分页的方法一、分页需求:客户端通过传递start(页码),pageSize(每页显示的条数)两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了分页的函数limitm,n,但是该函数的用法和我们的需求不一样,所以就需要我们根据实际情况去改写适合我们自己的分页语句,具体的分析如下:比如:查询第1条到第10条的数据的sql是:select*fromtablelimit0,…

  • 十进制的ascii码转化为十六进制_16进制对照表

    十进制的ascii码转化为十六进制_16进制对照表源地址:https://www.baidu.com/link?url=3bScEOF5BVXt7ptGDjBV5JmynXHqEh5lyut1vUx6vEM7qqPY1vtbO22Vvy7xUoFd&

  • spidermonkey对比v8_the monkey trial

    spidermonkey对比v8_the monkey trialJavaScript在浏览器中的应用几乎是尽人皆知的。实际上,JavaScript技术也可以使用在非浏览器应用程序当中,从而让应用程序具有自动的脚本功能。本文介绍了一种功能非常强大的JavaScript引擎SpiderMonkey。这个引擎是Mozilla 浏览器的 JavaScript引擎。该引擎接口定义清晰,模块化好。本文简要介绍了 SpiderMonkey的基本结构,并讲解了如何在自己的应用

  • wiringpi中文手册_abc成本计算法

    wiringpi中文手册_abc成本计算法从ABC+IOT到ABC anywhere,百度边缘计算的进击之路

  • wifi数据包解析_详细解析WiFi模块的基础知识「建议收藏」

    wifi数据包解析_详细解析WiFi模块的基础知识「建议收藏」1、WiFi模块的SDK是什么?SDK是WiFi模块的软件开发工具包(全称:SoftwareDevelopmentKit)的英文简称,一般都是一些软件工程师为特定的软件包、软件框架,硬件平台,操作系统等建立应用软件时的开发工具的集合。2、WiFi模块的驱动是什么?驱动程序即添加到操作系统中的一小块代码,其中包含有关硬件设备的信息。有了此信息,计算机就可以与设备进行通信。驱动程序是硬件厂…

发表回复

您的电子邮箱地址不会被公开。

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