C#数组和集合整理
写起来还是有些勉强的,还有很多用法没有完全理解,只整理了一些基本点。
Array
也就是数组。
具体表示方法是:数据类型[维数] 数组名=new 数据类型[]
举例如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int[] a = new int[3];
int[] b = new int[3] { 1, 2, 3 };
int[] c = new int[] { 1, 2, 3 };
int[,] d = new int[3,3];
}
}
}
ArrayList
动态数组,用法似乎跟c++的vector有点像。使用ArrayList必须引用Collections类。
声明 ArrayList a=new ArrayList();
添加
- Add(a) 添加元素a到末尾;
- Insert(b,a) 在位置b插入元素a;
- InsertRange(b,a) 在位置b插入集合a;
删除
- Remove(a) 移除元素a;
- RemoveAt(a) 移除位置a的元素;
- RemoveRange(a,b) 移除位置a到位置b的元素;
- Clear() 清空;
排序 Sort();
反转 Reverse();
查找
- IndexOf(a) 返回元素a的位置,没有则返回-1;
- Contains(a) 检测是否含有元素a,返回true/false;
输出元素
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
ArrayList a = new ArrayList();
foreach (int i in a) Console.WriteLine(i); //不需要强制转换
for (int i = 0; i < a.Count; i++) //与数组的Length不同
{
int n = (int)al2[i]; //需要强制转换
Console.WriteLine(n);
}
}
}
}
List
List类是ArrayList类的泛型等效类,它的大部分用法都与ArrayList相似。最大的区别就是在声明List集合时,我们需要同时声明List内元素的数据类型。
不过,大部分情况下,List似乎比ArrayList更加安全和高效,原因在于ArrayList会把所有插入其中的数据作为object类型来处理,所以在用ArrayList处理数据时,很可能会出现类型不匹配的错误,并且装箱和拆箱的过程会带来很大的性能耗损。关于这一点还不是很理解,会继续学习。
声明方式:
List<int> a = new List<int>();
Hashtable
传说中的哈希表。
哈希表的内部是无序散列,也就是说,其输出不是按照开始加入的顺序,但这也保证了高效率。如果以任意类型键值访问其中元素会快于其他集合,特别是当数据量特别大的时候,效率差别尤其大。如果一定要排序HashTable输出,只能自己实现。
声明:Hashtable a = new Hashtable();
Add(a,b) 在哈希表中添加键值对;
Clear() 清除哈希表中的键值对;
Contains(a) 判断哈希表中是否含有键a;
Remove(a) 删除哈希表中的键值对a;
ToString(); 返回当前Object的string;
示例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Hashtable a = new Hashtable();
a.Add(1, 1); //添加键值对
a[1] = 2; //给指定键赋值
//遍历1
foreach (DictionaryEntry b in a)
{
Console.WriteLine("{0}{1}", b.Key, b.Value);
}
//遍历2
IDictionaryEnumerator c = a.GetEnumerator();
while (c.MoveNext())
{
Console.WriteLine("{0}{1}", c.Entry.Key, c.Entry.Value);
}
//按序输出
ArrayList d = new ArrayList(a.Keys);
d.Sort();
foreach (int e in d)
{
Console.WriteLine(a[e]);
}
}
}
}
Dictionary
Dictionary与Hashtable类似,但是Dictionary遍历的顺序就是加入的顺序。
声明:Dictionary<string, string> a = Dictionary<string, string>();
Add(a,b) 在字典中添加键值对;
Clear() 清除字典中的键值对;
Contains<a,b> 判断字典中是否含有键值对;
ContainsKey(a) 判断字典中是否含有键a;
ContainsValue(a) 判断字典中是否含有值a;
Remove(a) 删除哈希表中的键值对a;
示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Dictionary<string, string> a = new Dictionary<string, string>();
a.Add("a", "aa"); //添加键值对
a.Add("b", "bb");
a["a"] = "cc"; //给指定键赋值
//用泛型结构体遍历
foreach (KeyValuePair<string, string> b in a)
{
Console.WriteLine("{0}{1}", b.Key, b.Value);
}
//获得值集合
foreach (string c in a.Values)
{
Console.WriteLine(c);
}
}
}
}
Stack
后进先出。
声明:Stack a = new Stack();
Pop() 出栈;
Push(a) 进栈;
Count 获得栈包含的元素数;
Peek() 获得栈顶元素;
Contain(a) 判断栈中是否含有元素a;
Clear() 清除栈;
ToArray() 将栈复制到数组;
示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Stack a = new Stack();
a.Push(1); //入栈
a.Push(2);
a.Pop(); //出栈
Console.WriteLine("{0}{1}",a.Count,a.Peek()); //输出栈的元素个数
//遍历
foreach (int b in a)
{
Console.WriteLine(b);
}
}
}
}
Queue
先进先出。
声明:Queue a = new Queue();
Enqueue(a) 入队;
Dequeue() 出队;
Count 获得队列包含的元素数;
Peek() 获得队列最前端元素;
Contain(a) 判断队列中是否含有元素a;
Clear() 清除队列;
ToArray() 将队列复制到数组;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Queue a = new Queue();
a.Enqueue(1); //入队
a.Enqueue(2);
a.Dequeue(); //出队
Console.WriteLine("{0}{1}", a.Count, a.Peek()); //输出队列的元素个数
//遍历
foreach (int b in a)
{
Console.WriteLine(b);
}
}
}
}
C#数组和集合整理的更多相关文章
- 初学者入门web前端 C#基础知识:数组与集合
对于初学者,想要入门web前端,要有足够的信念和坚持,不然只会越走越远,我现在就深深的体会到. 我本是一个很拒绝代码的人,以前想过UI设计,但是在这段学习时间里,发现其实只要认真,代码并不是很难 所以 ...
- .NET 基础 一步步 一幕幕[数组、集合、异常捕获]
数组.集合.异常捕获 数组: 一次性存储多个相同类型的变量. 一维数组: 语法: 数组类型[] 数组名=new 数组类型[数组长度]; 声明数组的语法: A.数据类型 [] 数组名称= new 数据类 ...
- [.net 面向对象编程基础] (17) 数组与集合
[.net 面向对象编程基础] (17) 数组与集合 学习了前面的C#三大特性,及接口,抽象类这些相对抽象的东西以后,是不是有点很累的感觉.具体的东西总是容易理解,因此我们在介绍前面抽象概念的时候,总 ...
- paip.数组以及集合的操作uapi java php python总结..
paip.数组以及集合的操作uapi 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/att ...
- c#重点[集合类型]异常,数组,集合ArrayList,List<>,hashTable,hashtable泛型(Dictionary)
1.foreach[对一些数组或集合进行遍历] foreach(类型 变量名 in 集合对象){语句体} //定义一个数组 ,,,,, }; foreach(var i in sNum1) { Con ...
- 创建泛类集合List以及数组转集合,集合转数组的应用
List<int> list = new List<int>(); list.Add(); list.Add(); list.Add(); list.AddRange(, , ...
- Java RGB数组图像合成 ImageCombining (整理)
/** * Java RGB数组图像合成 ImageCombinning (整理) * * 2016-1-2 深圳 南山平山村 曾剑锋 * * 注意事项: * 1.本程序为java程序,同时感谢您花费 ...
- Java比较器对数组,集合排序一
数组排序非常简单,有前辈们的各种排序算法,再加上Java中强大的数组辅助类Arrays与集合辅助类Collections,使得排序变得非常简单,如果说结合比较器Comparator接口和Collato ...
- java数组或集合返回空的问题
在有返回值的情况下,平时我写代码基本遇到错误什么都是返回null,我因为我觉得把数组或集合这个初始化占空间. 但是我发现这样在每次客户段调用都要进行非空判断,而且有时调用内置api还容易报错误,于是解 ...
随机推荐
- 《剑指offer》 链表中倒数第k个节点
本题来自<剑指offer> 链表中倒数第k个节点 题目: 输入一个链表,输出该链表中倒数第k个结点. 思路: 倒数第k个节点,而且只能访问一遍链表,定义两个节点,两者之间相差k个距离,遍历 ...
- ubuntu sublime text 3 安装
#安装GPG wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add - #确保apt被设置为 ...
- poj2836 状态压缩dp
自己的做法是枚举i,j作为顶点的矩形,然后再更新状态S,但是这种做法是错误的 正解是先把所有矩形对求出来,然后枚举状态S,每个处理每个状态时再枚举已经求出的矩形对,用旧状态更新新状态 #include ...
- mysql 去除重复 Select中DISTINCT关键字的用法 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是 distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,
在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记 ...
- jdbc问题:Access denied for user ''@'localhost''是因为没输入账户和密码
Access denied for user ''@'localhost' to database 'bjpowernode'
- 腾讯应用宝Android 应用加固(乐固)操作说明(转)
此处引用腾讯云对加固的优点说明如下: 为什么应用需要加固? 若应用不做任何安全防护,极易被病毒植入.广告替换.支付渠道篡改.钓鱼.信息劫持等,严重侵害开发者的利益. 应用进行安全防护,防止应用分发后, ...
- ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN DESC)函数的使用
ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN DESC)函数的作用是指定COLUMN(列)进行分区,在分区内指定COLUMN(列)进行排序 ...
- Visual Studio中的.suo(Solution User Options)文件
其实关于.suo文件,官方文档和网上很多资料就说明的十分详细了,本文主要按照我自己的理解将其整理归纳成一篇笔记以备日后查看..suo文件全称为:Solution User Options,看了很多资料 ...
- es6 let和const
一.let 1.let块作用域 if(true){ var a=1; let b=2; } console.log("a:"+a);//a:1 console.log(" ...
- mysql中cast() 和convert()的用法讲解
一.在mysql操作中我们经常需要对数据进行类型转换.此时我们应该使用的是cast()或convert(). 二.两者的对比 相同点:都是进行数据类型转换,实现的功能基本等同 不同点:两者的语法不同, ...