【学习备忘录】
- 学习笔记,一些技术点记不住,记本子上总不如放网上舒服,涉及到转载的地方均已标出,如遗漏或侵权麻烦联系作者处理。
- 文章未经授权可以转载,可以用作其他用途,技术无罪,但我所引用转载到的地方,请保留他人的链接出处,保障人家的合法权益。
- 文章所包含的相应文件已经上传,提供下载或者直接复制本页代码做一个白嫖怪也是可以的。
- 作者比较菜,有错误或不足敬请评论斧正, 联系方式如下👇
话不多说,进入正文:
示例使用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();
}
}
}
读者:👉我有问题要跟作者讨论人生👈
作者:不好意思,你这个需求我搞不了。
完