C#list集合按元素出现次数排序取值(含去重功能)

【学习备忘录】

  1. 学习笔记,一些技术点记不住,记本子上总不如放网上舒服,涉及到转载的地方均已标出,如遗漏或侵权麻烦联系作者处理。
  2. 文章未经授权可以转载,可以用作其他用途,技术无罪,但我所引用转载到的地方,请保留他人的链接出处,保障人家的合法权益。
  3. 文章所包含的相应文件已经上传,提供下载或者直接复制本页代码做一个白嫖怪也是可以的。
  4. 作者比较菜,有错误或不足敬请评论斧正, 联系方式如下👇
    联系作者
    话不多说,进入正文:
    示例使用VS2019版,控制台应用程序。
    每行注释都很详细,对小白很友善,其实代码并不多。

using System;
using System.Collections.Generic;
using System.Linq;
namespace Test2
{
    class Text2
    {
        static void Main(string[] args)
        {
            //先做准备工作 定义一个数组
            int[] num = { 9, 1, 1, 3, 3, 3, 5, 5, 5, 5 };
            //实例化一个集合对象
            List<int> list = new List<int>();
            //实例化一个字典
            Dictionary<int, int> dic = new Dictionary<int, int>();
            //集合存数
            foreach (var item in num)
            {
                list.Add(item);//添加到集合中
            }
            //验证打印是否存进了list集合(如不需要可删除此步骤)
            for (int i = 0; i < list.Count; i++)
            {
                /* WriteLine和Write的区别就是:一个换行一个不换行,例如为Console.Write(),结果是一行  9113... 
                 * 若为Console.WriteLine()则结果为多行,每行分别为9、1、1、3、...
                 */
                if (i + 1 == list.Count)      //如果是最后一次循环,则打印后换行
                {
                    Console.WriteLine(list[i]);
                }
                else                         //否则,在上次结果后继续打印,不换行  
                {
                    Console.Write(list[i]);
                }
            }
            //如果需要单独验证上方打印内容请解除下行注释,如不需要则忽略。Console.ReadKey()这里起到暂停控制台应用程序的作用
            //Console.ReadKey();
            #region 此处转自https://blog.csdn.net/u010452388/article/details/78472636转载请标明出处
            //这里用到了上方定义的字典类型,间接的去重,文章最后有直接去重方法,所以按出现次数排序 从多到少应为 5319
            for (int i = 0; i < list.Count; i++) //循环存数的list集合
            {
                if (dic.ContainsKey(list[i]))   //如果已经包含指定的字符
                {
                    dic[list[i]]++;             //将对应的dic键的value值+1
                }
                else                            //如果未包含指定的字符
                {
                    dic.Add(list[i], 1);        //将此字符添加到dic的键中,并初始化dic的value值为1
                }
            }
            //循环打印验证字典类型是否进行了数据填充(如不需要可删除此步骤)
            foreach (KeyValuePair<int, int> item in dic)
            {
                //占位符:{0},{1} 则逗号后边第一个值item.Key为{0}的值,以此类推。
                Console.WriteLine("元素{0},出现了{1}次", item.Key, item.Value);
            }
            #endregion
            //下一行作用第36行已作说明
            //Console.ReadKey();
            #region 关于上方foreach遍历的疑问 转自https://blog.csdn.net/nodeman/article/details/80810376
            /* KeyValuePair 和 Dictionary 的关系
            ①、KeyValuePair
            a、KeyValuePair 是一个结构体(struct);
            b、KeyValuePair 只包含一个Key、Value的键值对。
            ②、Dictionary
            a、Dictionary 可以简单的看作是KeyValuePair 的集合;
            b、Dictionary 可以包含多个Key、Value的键值对。
             */
            #endregion
            //此处排序,OrderByDescending(降序)需要添加using System.Linq;引用,OrderBy为升序
            //所使用的方法为lamda表达式排序方法,涉及的太多这里不作赘述,=>符号读作"goes to",左边是参数右边是语句块
            //具体分析下行代码:新建一个list集合用来存保存的排序完的数据,这个集合的类型为KeyValuePair<int, int>型
            //后一段解析:需要排序的数据.降序函数(总的数据的代号item随便起的名字=>对item的Value进行操作).得到的数据转化为list类型
            List<KeyValuePair<int, int>> daobidao = dic.OrderByDescending(item => item.Value).ToList();
            //①:循环打印查看是否如预期进行了排序(如不需要可删除此步骤)
            for (int i = 0; i < daobidao.Count; i++)
            {
                Console.WriteLine(daobidao[i]);
            }
            //下一行作用第36行已作说明
            //Console.ReadKey();
            //最后可把排完序的键或者值取出来另用,此处把字典集合里的键,存到最初设置的list集合中。
            //先清除原有集合中的元素,这是规矩
            list.Clear();
            foreach (KeyValuePair<int, int> QQ1425605086 in daobidao)
            {
                //相互交流
                list.Add(QQ1425605086.Key);
                //若取value值,也就是它的出现次数的话
                //list.Add(QQ1425605086.Value);   二者只能选一个存,如果都想存,请再实例化一个list对象分别存储
            }
            //下一行作用第36行已作说明
            //Console.ReadKey();
            //②:循环打印查看是否如预期进行了存数(如不需要可删除此步骤)
            foreach (var item in list)
            {
                Console.Write(item);
            }
            //结束,下边这行代码要保留,要不运行就会哗哗哗的没了,一闪而过
            Console.ReadKey();

            文章最后分享,list集合直接去重方法,超简单一行代码: 实例化,去重函数
            //List<int> list = new List<int>();
            //List<int> list1 = list.Distinct().ToList();
            //验证是否去重
            //for (int i = 0; i < list1.Count; i++)
            //{
            //    Console.Write(list1[i]);
            //}
            //Console.ReadKey();
        }
    }
}

读者:👉我有问题要跟作者讨论人生👈
作者:不好意思,你这个需求我搞不了。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值