C# List常用方法及Dictionary常用方法汇总
本文主要汇总了在开发过程中,使用List和Dictionary常用的方法,例如增、删、改、查、排序等等各种常用操作。
在平时的开发过程中,List和Dictionary是我们经常使用到的数据结构,而且由于本人记性又差有些方法长时间不用就都忘了,所以总结出此博客,用于记录和分享一下关于这两种数据结构的使用方法。
一、List
首先对于这些内容最权威和完整介绍的地方就是微软的官方文档,里面全面且详细的介绍了Lits的所有属性及方法,经常查看官方文档是一个非常好的习惯。本文将会总结出在日常开发过程中相对常用的一些方法同时会配上示例。
1.添加方法:
Add(T)---将对象添加到List结尾处。
AddRange(IEnumerable<T>)---将指定集合的元素添加到List末尾。
Insert(int32,T)---将元素T插入到List指定索引处。
InsertRange(int32,IEnumerable<T>)---将集合中的元素插入到List的指定索引处。
2.删除方法:
Clear()---从List中移除所有元素。
Remove(T)--从List中移除特定对象的第一个匹配项。(请注意值类型与引用类型)
RemoveAll(Preaicate<T>)---移除与指定谓词所定义的条件相匹配的所有元素。例:
static void Main(string[] args)
{
List<test> a = new List<test>();
for (int i = 0; i < 10; i++)
{
a.Add(new test(i, "张先生"));
} a.RemoveAll(x => x.ID > 5);
} public class test
{
public test(int a, string b)
{
ID = a;
Name = b;
}
public int ID { get; set; }
public string Name { get; set; }
}
结果:删除掉了ID大于5的全部元素。
RemoveAt(Int32)---移除List的指定索引处的元素。
RemoveRange(Int32,Int32)---从List中移除一系列元素。
3.搜索方法:
对于List的搜索方法建议使用Linq查询表达式或者Lambda表达式的方式,可以参考博文:C# LINQ查询表达式用法对应LAMBDA表达式
IndexOf(T)---搜索指定的对象,并返回整个List中第一个匹配项从零开始的索引。
IndexOf(T,Int32)---搜索指定对象并返回List中指定索引到最后一个元素这部分元素中第一个匹配项的从零开始的索引。
IndexOf(T,Int32,Int32)---搜索指定对象并返回List中从指定索引开始并包含指定元素的这部分元素中第一个匹配项的从零开始索引。
Find(Preaicate<T>)---搜索与指定谓词所定义的条件相匹配的元素,并返回整个List中的第一个匹配元素。
FindAll(Preaicate<T>)---搜索与指定谓词定义的条件匹配的所有元素。
FindIndex(Preaicate<T>)---搜索与指定谓词所定义的条件相匹配的元素,并返回整个 List<T> 中第一个匹配元素的从零开始的索引。
FindIndex(Int32,Preaicate<T>)---搜索与指定谓词所定义的条件相匹配的元素,并返回 List<T> 中从指定索引到最后一个元素的元素范围内第一个匹配项的从零开始的索引。
FindIndex(In32,Int32,Preaicate<T>)---搜索与指定谓词所定义的条件相匹配的一个元素,并返回 List<T> 中从指定的索引开始、包含指定元素个数的元素范围内第一个匹配项的从零开始的索引。例:
static void Main(string[] args)
{
List<test> a = new List<test>();
for (int i = 0; i < 10; i++)
{
a.Add(new test(i, "张先生"));
}
int res = a.FindIndex(x => x.ID == 3);
Console.WriteLine(res);
} public class test
{
public test(int a, string b)
{
ID = a;
Name = b;
}
public int ID { get; set; }
public string Name { get; set; }
}
结果:控制台打印的结果为3。
4.修改方法:
对于当前List是支持通过索引的方式进行修改操作的,操作方式类似于数组。
5.排序方法:请参考博文C#LINQ查询表达式用法对应LAMBDA表达式
Sort()---使用默认比较器对整个 List<T> 中的元素进行排序。
对于List<T>类型的List进行排序,如果想要使用Sort()方法的话,可以通过匿名委托的方式实现,个人建议实现排序功能使用Linq的方式最好。对于Sort方法可以进行一下了解。请参考C#里List.Sort的用法

public MainWindow()
{
InitializeComponent(); List<test> a = new List<test>(); a.Add(new test()
{
a = 1,
b = ""
});
a.Add(new test()
{
a = 4,
b = ""
});
a.Add(new test()
{
a = 2,
b = ""
});
a.Add(new test()
{
a = 3,
b = ""
});
a.Add(new test()
{
a = 9,
b = ""
});
a.Add(new test()
{
a = 7,
b = ""
});
a.Add(new test()
{
a = 6,
b = ""
}); a.Sort((left, right) =>
{
if (left.a > right.a)
return 1;
else if (left.a == right.a)
return 0;
else
return -1;
});
} class test
{
public int a;
public string b;
}
通过以上方式可以实现用Sort方法对List<T>类型进行排序。
6.其它方法:
Exists(Predicate<T>)---确定 List<T> 是否包含与指定谓词定义的条件匹配的元素。
Contains(T)---确定某元素是否在 List<T> 中。
以上两个方法使用代码如下:
public MainWindow()
{
InitializeComponent(); List<test> a = new List<test>(); a.Add(new test()
{
a = 1,
b = ""
}); a.Add(new test()
{
a = 4,
b = ""
}); var aa = new test()
{
a = 55,
b = "11"
};
a.Add(aa); var res1 = a.Exists(x => x.a == 55);
var res2 = a.Contains(aa);
} class test
{
public int a;
public string b;
}
运行结果,res1=true;res2=true
二、Dictionary
介绍最完整详细的仍然是官方文档。
1.添加方法
Add(TKey,TValue)---将指定的键和值添加到字典中。
TryAdd(Tkey,TValue)---尝试将指定的键和值添加到字典中。
2.删除方法
Clear()---将所有键和值从 Dictionary<TKey,TValue> 中移除。
Remove(TKey)---从 Dictionary<TKey,TValue> 中移除所指定的键的值。
Remove(TKey,TVlue)---从 Dictionary<TKey,TValue> 中删除具有指定键的值,并将元素复制到 value 参数。
3.搜索方法
Item[TKey]---获取或设置与指定的键关联的值。
可以使用Where方法实现,代码如下:
Dictionary<string, int> a = new Dictionary<string, int>();
a.Add("1", 1);
a.Add("2", 2);
a.Add("3", 3);
a.Add("4", 4);
var res = a.Where(x => x.Key == "3").ToDictionary(x=>x.Key,y=>y.Value);
运行结果res是字典类型"3",3
4.修改方法
Item[TKey]---获取或设置与指定的键关联的值。通常使用字典的Key来修改字典的Value
字典类型的Key一旦定义则无法修改,如果想修改只能删除重新添加。
5.排序方法
一般字典类型主要是使用Key来进行索引,所以对于字典这种类数据型进行排序是无意义的,所以字典本身也没有sort方法。
如果非要排序也是可以实现通过Linq即可实现,代码如下:
Dictionary<string, int> a = new Dictionary<string, int>();
a.Add("4", 1);
a.Add("1", 2);
a.Add("3", 3);
a.Add("5", 4); var res1 = a.OrderBy(x=>x.Key).ToDictionary(x => x.Key, x => x.Value);
var res2 = a.OrderByDescending(x=>x.Key).ToDictionary(x => x.Key, x => x.Value);
运行结果res1和res2分别实现按照字典key的升序排序和降序排序。
6.其它方法
ContainsKey(TKey)---确定是否 Dictionary<TKey,TValue> 包含指定键。
ContainsKey(TValue)---确定 Dictionary<TKey,TValue> 是否包含特定值。
共同提高,欢迎指正,交流。
C# List常用方法及Dictionary常用方法汇总的更多相关文章
- python字符串,列表,字典的常用方法
本篇内容 字符串的常用方法 列表的常用方法 字典的常用方法 字符串的常用方法 center 字符居中显示,指定字符串长度,填充指定的填充字符 string = "40kuai" p ...
- ExtJS基础知识总结:常用控件使用方式(一)
概述 最近一直在做相关ExtJs方面的项目,遇到了ExtJs使用方面的一系列问题,现在将使用技巧做个记录汇总,以便于下次能够快速使用.以下都是ExtJs控件的常用方法,做简单汇总,俗话说,好记星不如烂 ...
- Query 快速入门教程
Query 快速入门教程 http://www.365mini.com/page/jquery-quickstart.htm#what_is_jquery jquery常用方法及使用示例汇总 http ...
- 【学习笔记】【Foundation】字典
字典NSDictionary: 用于保存具有映射关系的数据:key-value: 创建NSDictionary的常用方法: dictionary: dictionaryWithContentsOfFi ...
- Java 相关注意事项小结
程序是一系列有序指令的集合: Java主要用于开发两类程序: 1)桌面应用程序2)Internet应用程序1,Java程序:三步走,编写--编译--运行:2,使用记事本开发:1)以.java为后缀名保 ...
- Java 基础功底
Java 基础语法特性: 首先了解并做好Java Web 开发环境配置(包含 JDK 的配置)是非常必要的.其中 CLASSPATH 的值开始必须包含 ".",否则用 javac ...
- C# 基础知识系列- 3 集合数组
简单的介绍一下集合,通俗来讲就是用来保管多个数据的方案.比如说我们是一个公司的仓库管理,公司有一堆货物需要管理,有同类的,有不同类的,总而言之就是很多.很乱.我们对照集合的概念对仓库进行管理的话,那么 ...
- JavaWeb_day06_Filter过滤器
本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! day06 request 对象常用方法 respon ...
- JavaScript基础(一)之语法、变量、数据类型
1.JavaScript语法 ①区分大小写 ②弱类型变量 ③每行结尾分号可有可无 ④括号用于代码块 ⑤注释有两种方式(单行和多行注释) 2.JavaScrip变量 ①用Var声明,不要初始化 ②可以在 ...
随机推荐
- MongoDB的下载、安装与部署
1.什么是MongoDB? 它是介于关系型数据库和非关系型数据库之间的一种NoSQL数据库,用C++编写,是一款集敏捷性.可伸缩性.扩展性于一身的高性能的面向文档的通用数据库. 2.为什么要用Mong ...
- ES进行date_histogram时间聚合,聚合结果时间不正确问题
在做项目中,有一个需求是统计本周内每天的漏洞数量,我选用的是ES中的date_histogram函数来进行聚合统计: 但是出现了一个问题,聚合出来的结果和想要统计的结果时间不一致,如下图所示 时间区间 ...
- 从几个问题开始理解CFS调度器
本文转载自从几个问题开始理解CFS调度器 导语 CFS(完全公平调度器)是Linux内核2.6.23版本开始采用的进程调度器,它的基本原理是这样的:设定一个调度周期(sched_latency_ns) ...
- [Python学习笔记]文件的读取写入
文件与文件路径 路径合成 os.path.join() 在Windows上,路径中以倒斜杠作为文件夹之间的分隔符,Linux或OS X中则是正斜杠.如果想要程序正确运行于所有操作系统上,就必须要处理这 ...
- 你见过老外的 Java 面试题吗 (上)?
前言 最近无聊的在逛某 tube 网站,本来想看看大家是怎么吐槽川普的,结果无意间点进了一个老外面试 Java 的视频,对于常年面试被吊打的我瑟瑟发抖,于是决定进去一探究竟. 毕竟不是专业的后台开发, ...
- AdoptOpenJDK是什么?
要搞清楚AdoptOpenJDK是什么,前提条件是我们需要知道JDK是什么,OpenJDK是什么.明白了JDK和OpenJDK的关系,会容易明白什么是AdoptOpenJDK. JDK是什么? 首先, ...
- SpringBoot2.1整合Mybatis-Generator以及tk.mybatis
1:添加依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http ...
- 《C++ Primer》笔记 第3章 字符串、向量和数组
位于头文件的代码一般来说不应该使用using声明. 如果使用等号(=)初始化一个变量,实际上执行的是拷贝初始化,编译器把等号右侧的初始值拷贝到新创建的对象中去.与之相反,如果不使用等号,则执行的是直接 ...
- C++对象的生存期笔记
下面随笔记录了C++对象的生存期知识 静态生存期 这种生存期与程序的运行期相同. 在文件作用域中声明的对象具有这种生存期. 在函数内部声明静态生存期对象,要冠以关键字static . 动态生存期 块作 ...
- mysql-canal-rabbitmq 安装部署教程
原文 1.1. 开启 MySQL 的 binlog 日志 修改 my.cnf 或 my.ini(windows), 添加配置项: # binlog 日志存放路径 log-bin=D:\env\mysq ...