c#集合去重&排序常用方法
2023-09-11 14:22:57 时间
list与数组转Hashset&SortedSet
//创建hashset去重
var hashSet = new HashSet<int>(){1,1,2,2};
Console.WriteLine("HashSet:"+String.Join(", ", hashSet));
// HashSet:1, 2
//创建list包含重复元素
var ints = new List<int>{1,1,3,3,2,2};
//创建数组转HashSe包含重复元素
int[] numbers = { 1, 1, 3, 2, 2 };
//list转HashSet
var set = ints.ToHashSet();
Console.WriteLine("List转HashSet:"+String.Join(", ", set));
//List转HashSet:1, 3, 2
var immutableSortedSet = ints.ToImmutableSortedSet();
Console.WriteLine("immutableSortedSet:"+String.Join(", ", immutableSortedSet));
//数组转HashSet
var hashSet1 = new HashSet<int>(numbers);
Console.WriteLine("数组转HashSet:"+String.Join(", ", hashSet1));
//数组转HashSet:1, 3, 2
//数组转SortedSet
var sortedSet = new SortedSet<int>(numbers);
Console.WriteLine("数组转SortedSet:"+String.Join(", ", sortedSet));
//数组转SortedSet:1, 2, 3
当hashset存的是类时
创建饮料类
public class Drink
{
public String Name { get; set; }
public int Price { get; set; }
}
new一个HashSet存放饮料类
var drinks = new HashSet<Drink>();
drinks.Add(new Drink{Name = "牛奶",Price = 19});
drinks.Add(new Drink{Name = "牛奶",Price = 20});
drinks.Add(new Drink{Name = "茉莉花茶",Price = 19});
drinks.Add(new Drink{Name = "茉莉花茶",Price = 19});
foreach (var drink in drinks)
{
Console.WriteLine(drink.Name+drink.Price);
}
打印出来并未去重
自定义比较规则
public class DrinkEquelityCompare : IEqualityComparer<Drink>
{
public bool Equals(Drink x, Drink y)
{
//Name相等去除
return x.Name == y.Name;
}
public int GetHashCode(Drink obj)
{
return base.GetHashCode();
}
}
重新new一个类
//var drinks = new HashSet<Drink>(new DrinkEquelityCompare());
drinks.Add(new Drink{Name = "牛奶",Price = 19});
drinks.Add(new Drink{Name = "牛奶",Price = 20});
drinks.Add(new Drink{Name = "茉莉花茶",Price = 19});
drinks.Add(new Drink{Name = "茉莉花茶",Price = 19});
foreach (var drink in drinks)
{
Console.WriteLine(drink.Name+drink.Price);
}
此时打印以及去除掉Name相同的值了
SortedSet存放类时自定义排序规则
还是用刚刚的Drink类
public class DrinkCompare : IComparer<Drink>
{
public int Compare(Drink x, Drink y)
{
//返回值>0 x大; 返回值=0,一样大; 返回值小于0,y大
return x.Price-y.Price;
}
}
添加数据
SortedSet<Drink> sorted = new(new DrinkCompare());
sorted.Add(new Drink{Name = "橘汁",Price = 19});
sorted.Add(new Drink{Name = "牛奶",Price = 20});
sorted.Add(new Drink{Name = "茉莉花茶",Price = 17});
sorted.Add(new Drink{Name = "可乐",Price = 21});
foreach (var drink in sorted)
{
Console.WriteLine(drink.Name+drink.Price);
}
打印出来的数据以及按照price进行排序了
相关文章
- C#操作MongoDB
- C#订阅与发布标准实现 visual studio code .net 开发 设计模式之☞策略模式 C#字符串转二进制、二进制转字符串 c# 接口的协变和逆变 c# 使用迭代器来创建可枚举类型 博客园首页新随笔联系订阅管理 随笔 - 117 文章 - 0 评论 - 57 c# 创建,加载,修改XML文档
- 如何使用T-SQL备份还原数据库及c#如何调用执行? C#中索引器的作用和实现。 jquery控制元素的隐藏和显示的几种方法。 localStorage、sessionStorage用法总结 在AspNetCore中扩展Log系列 - 介绍开源类库的使用(一) span<T>之高性能字符串操作实测
- 请求大神,C#如何截取字符串中指定字符之间的部分 按指定字符串分割 一分为二 c# 去除字符串中的某个已知字符
- C#不用union,而是有更好的方式实现 .net自定义错误页面实现 .net自定义错误页面实现升级篇 .net捕捉全局未处理异常的3种方式 一款很不错的FLASH时种插件 关于c#中委托使用小结 WEB网站常见受攻击方式及解决办法 判断URL是否存在 提升高并发量服务器性能解决思路
- c#实例化继承类,必须对被继承类的程序集做引用 .net core Redis分布式缓存客户端实现逻辑分析及示例demo 数据库笔记之索引和事务 centos 7下安装python 3.6笔记 你大波哥~ C#开源框架(转载) JSON C# Class Generator ---由json字符串生成C#实体类的工具
- C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理
- Oracle 远程访问配置 在 Windows Forms 和 WPF 应用中使用 FontAwesome 图标 C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素” C#[Win32&WinCE&WM]应用程序只能运行一个实例:MutexHelper Decimal类型截取保留N位小数向上取, Decimal类型截取保留N位小数并且不进行四舍五入操作
- C# IL DASM 使用-破解c#软件方法
- C# (初入江湖)-写个时间显示器(项目结构&基本控件&程序的发布与保存)
- C# Graphics
- C#,图像二值化(09)——全局阈值的最大熵算法(Maximum Entropy Algorithm)与源程序
- C#,巴都万数列(Padonve Number)的算法与源代码
- 在C#中使用Irony实现SQL语句的解析
- 《C#零基础入门之百识百例》(三十三)方法参数 -- 位置&命名参数 -- 求长方体体积
- C# 之 静态方法和非静态方法对比
- C# 匿名方法和Lambda表达式
- C# 特性参数(注解属性加在参数前面)
- C#中,出现Inconsistent accessibility返回类型不一致问题
- c#代码规则,C#程序中元素的命名规范