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声明,不要初始化 ②可以在 ...
随机推荐
- TypeScript & global.d.ts
TypeScript & global.d.ts https://www.typescriptlang.org/docs/handbook/declaration-files/template ...
- svg rect to polygon points & points order bug
svg rect to polygon points & points order bug https://codepen.io/xgqfrms/pen/vYOWjYr?editors=100 ...
- nodejs package.json中的exports
test/package.json { "name": "test", "main": "index.js", &quo ...
- NGK DeFi项目即将上线,打造去中心化闭环金融生态!
据最新官方消息称:NGK已于近日宣布将进军DeFi领域,NGK此次的DeFi的项目将会是一个去中心的交易平台,其最大的功能是进行数字货币的交换.在用户选择了需要支付的数字货币和想购买的数字货币后,系统 ...
- 亿级流量客户端缓存之Http缓存与本地缓存对比
客户端缓存分为Http缓存和本地缓存,使用缓存好处很多,例如减少相同数据的重复传输,节省网络带宽资源缓解网络瓶颈,降低了对原始服务器的要求,避免出现过载,这样服务器可以更快响应其他的请求 Http缓存 ...
- [转]在ROS下使用zeroconf配置多机通信
原文地址:http://www.corvin.cn/635.html,转载主要方便随时查阅,如有版权要求,请及时联系. 0x00 为何需要配置ROS多机通信 众所周知ROS是分布式系统,因此可以将机器 ...
- Android - 利用扩展函数为Bitmap添加文字水印
<异空间>项目技术分享系列--扩展函数为Bitmap添加文字水印 对图片Bitmap绘制文字水印还是比较常见的需求,毕竟版权意识都在增强(用户可以给自己图片加上用户名),还可以为用户提供更 ...
- 微信小程序左滑删除
<view class="touch-item {{item.isTouchMove ? 'touch-move-active' : ''}}" data-index=&qu ...
- mysql启动报错1067进程意外终止
查找了网上的很多种方法都没用,最终找到了我的mysql的安装路径,删除了my.ini配置文件,再重新启动就成功了!
- c# float类型和double类型相乘出现精度丢失
c# float类型和double类型相乘出现精度丢失 double db = 4.0; double db2 = 1.3; float f = 1.3F; float f2 = 4.0F; Deci ...