----------------------
Windows Phone 7手机开发、
.Net培训、期待与您交流! ----------------------
数组是一组具有相同类型和名称的变量的集合,如一组整数、一组字符等;组成数组的这些变量称为数组的元素;
一组数组的定义中包含以下几个要素:
1)元素类型 2)数组的维数 3)每个维数的上、下限
数组类型从类型System.Array继承而来
数组的定义:<Type>[ ] <name>
代码:
int[] anIntArray = new int[5] { 14, 25, 36, 19, 13 };
//遍历输出
foreach (int i in anIntArray)
{
Console.WriteLine("遍历输出结果:{0}", i);
}
//数组元素的清空只需将部分元素设置为0、false或空 Array.Clear()方法
//Array.Clear(anIntArray, 1, 3);//返回值是空
//foreach (int i2 in anIntArray)
//{
// Console.WriteLine("清空后的数组:{0}", i2);
//}
int weizhi=Array.IndexOf(anIntArray, 36);
Console.WriteLine("36的位置:{0}", weizhi);
//数组排序Array.Sort和
//Array.Sort(anIntArray);
//foreach (int i3 in anIntArray)
//{
// Console.WriteLine("排序Sort:{0}",i3);//由小到大的排序
//}
//排序反转输出Array.Reverse
Array.Reverse(anIntArray);
foreach (int i4 in anIntArray)
{
Console.WriteLine("反转输出:{0}", i4);
}
Console.ReadKey();
//遍历输出
foreach (int i in anIntArray)
{
Console.WriteLine("遍历输出结果:{0}", i);
}
//数组元素的清空只需将部分元素设置为0、false或空 Array.Clear()方法
//Array.Clear(anIntArray, 1, 3);//返回值是空
//foreach (int i2 in anIntArray)
//{
// Console.WriteLine("清空后的数组:{0}", i2);
//}
int weizhi=Array.IndexOf(anIntArray, 36);
Console.WriteLine("36的位置:{0}", weizhi);
//数组排序Array.Sort和
//Array.Sort(anIntArray);
//foreach (int i3 in anIntArray)
//{
// Console.WriteLine("排序Sort:{0}",i3);//由小到大的排序
//}
//排序反转输出Array.Reverse
Array.Reverse(anIntArray);
foreach (int i4 in anIntArray)
{
Console.WriteLine("反转输出:{0}", i4);
}
Console.ReadKey();
集合是一种类似数组的容器,可以支持比数组更加灵活的数据操纵;数组的大小是固定的;如果元素的个数是动态的,就应该使用集合
通常将数组(Array)和集合的概念分开,认为集合包含ArrayList、哈希表Hashtable、队列Queue等
1)ArrayList类
代码:
ArrayList al = new ArrayList();
al.Add("czsas");
al.Add("二十");
al.Add("什么都可以");
for (int i = 0; i < al.Count; i++)
{
Console.WriteLine(al[i]);
}
Console.WriteLine(al.Capacity);
Console.WriteLine(al.Contains("二十")); //检查某个元素是否在里面
//al.Clear(); //是移除所有的元素
al.RemoveAt(1);
//al.Remove(20); 这两个移除的区别是前者靠索引移除某个元素,而后者是直接输入移除的东西
for (int i = 0; i < al.Count; i++)
{
Console.WriteLine(al[i]);
}
string[] str=new string[5];
al.CopyTo(str);
foreach (string str1 in str)
{
Console.WriteLine(str1);
}
Console.ReadKey();
al.Add("czsas");
al.Add("二十");
al.Add("什么都可以");
for (int i = 0; i < al.Count; i++)
{
Console.WriteLine(al[i]);
}
Console.WriteLine(al.Capacity);
Console.WriteLine(al.Contains("二十")); //检查某个元素是否在里面
//al.Clear(); //是移除所有的元素
al.RemoveAt(1);
//al.Remove(20); 这两个移除的区别是前者靠索引移除某个元素,而后者是直接输入移除的东西
for (int i = 0; i < al.Count; i++)
{
Console.WriteLine(al[i]);
}
string[] str=new string[5];
al.CopyTo(str);
foreach (string str1 in str)
{
Console.WriteLine(str1);
}
Console.ReadKey();
2)Hashtable类(哈希表) 是表示键值对的集合,键值能够根据键的散列代码进行组织
代码:
Hashtable ha = new Hashtable();
ha.Add("key1", 1); //向组合添加元素
ha.Add("key2", 2);
ha.Add("星期一", 1);
ha.Add("星期二", 2);
ha["星期三"] = 3;
IEnumerator En = ha.GetEnumerator();
while (En.MoveNext())
{
DictionaryEntry de = (DictionaryEntry)En.Current; //定义设置或检索键值对
Console.WriteLine("{0}:{1}",de.Key,de.Value);
}
Console.ReadKey();
ha.Add("key1", 1); //向组合添加元素
ha.Add("key2", 2);
ha.Add("星期一", 1);
ha.Add("星期二", 2);
ha["星期三"] = 3;
IEnumerator En = ha.GetEnumerator();
while (En.MoveNext())
{
DictionaryEntry de = (DictionaryEntry)En.Current; //定义设置或检索键值对
Console.WriteLine("{0}:{1}",de.Key,de.Value);
}
Console.ReadKey();
3)SortedList(有序表)是表示键值对的集合,通过这些键的值进行排序;由于要排序所以比Hashtable要慢
代码:
SortedList sl = new SortedList();
sl.Add("aa", 122); //向组合添加元素
sl.Add("bb", 22);
sl.Add("cc", 31);
sl.Add("dd", 42);
for (int i = 0; i < sl.Count; i++)
{
Console.WriteLine("{0}:{1}",sl.GetKey(i),sl.GetByIndex(i));
}
SortedList sl1 = new SortedList();
sl1.Add(1, "aa");
sl1.Add(5, "cd");
sl1.Add(3, "bb");
sl1.Add(2, "cc");
sl1.Add(4, "de");
for (int i = 0; i < sl1.Count; i++)
{
Console.WriteLine("{0}:{1}", sl1.GetKey(i), sl1.GetByIndex(i)); //GetKey获取索引处的键 GetByIndex获取索引处的值
}
Console.ReadKey();
sl.Add("aa", 122); //向组合添加元素
sl.Add("bb", 22);
sl.Add("cc", 31);
sl.Add("dd", 42);
for (int i = 0; i < sl.Count; i++)
{
Console.WriteLine("{0}:{1}",sl.GetKey(i),sl.GetByIndex(i));
}
SortedList sl1 = new SortedList();
sl1.Add(1, "aa");
sl1.Add(5, "cd");
sl1.Add(3, "bb");
sl1.Add(2, "cc");
sl1.Add(4, "de");
for (int i = 0; i < sl1.Count; i++)
{
Console.WriteLine("{0}:{1}", sl1.GetKey(i), sl1.GetByIndex(i)); //GetKey获取索引处的键 GetByIndex获取索引处的值
}
Console.ReadKey();
4)Queue类表示对象先进先出的集合(从一端插入而从另一端移出) 通常用于按接收顺序存储信息
代码:
Queue qu = new Queue();
qu.Enqueue("队列1"); //该方法是将对象添加到队列的尾端
qu.Enqueue("队列2");
qu.Enqueue(3);
qu.Dequeue();//移除并返回位于 Queue 开始处的对象。
//列举器的功能是读取集合的数据,即循环访问集合的对象。一个列举器只能与一个集合,但一个集合可以有多个列举器。
IEnumerator En = qu.GetEnumerator();
while (En.MoveNext())//推进到集合的下一个元素
{
Console.WriteLine(En.Current);//获取集合的当前元素
}
Console.WriteLine(qu.Peek()); //读取头部一个元素,但不删除
Console.ReadKey();
qu.Enqueue("队列1"); //该方法是将对象添加到队列的尾端
qu.Enqueue("队列2");
qu.Enqueue(3);
qu.Dequeue();//移除并返回位于 Queue 开始处的对象。
//列举器的功能是读取集合的数据,即循环访问集合的对象。一个列举器只能与一个集合,但一个集合可以有多个列举器。
IEnumerator En = qu.GetEnumerator();
while (En.MoveNext())//推进到集合的下一个元素
{
Console.WriteLine(En.Current);//获取集合的当前元素
}
Console.WriteLine(qu.Peek()); //读取头部一个元素,但不删除
Console.ReadKey();
5)Stack是表示对象后进后出的集合,通常用于接收的反转顺序存储信息; 栈的修改原则是按照后进后出的原则进行,每次删除(退栈)的总是”最新“的元素,即最后插入(进栈)的元素,而最先插入的是被放在栈的底部,要到最后才删除 。
代码:
Stack sk = new Stack();
sk.Push("栈1");
sk.Push(12);
sk.Push("obj1");
sk.Push("cdasd"); //最后插入的元素
IEnumerator en = sk.GetEnumerator();
while (en.MoveNext())
{
Console.WriteLine("移除顶部前:{0}",en.Current);
} //输出顺序结果:cdasd-obj1-12-栈1 (先进后出,后进先出)
Console.WriteLine("\n");
sk.Pop(); //移除顶部的对象
IEnumerator en1 = sk.GetEnumerator();
while (en1.MoveNext())
{
Console.WriteLine("移除顶部后:{0}",en1.Current);
}//结果:obj1-12-栈1
Console.ReadKey();
sk.Push("栈1");
sk.Push(12);
sk.Push("obj1");
sk.Push("cdasd"); //最后插入的元素
IEnumerator en = sk.GetEnumerator();
while (en.MoveNext())
{
Console.WriteLine("移除顶部前:{0}",en.Current);
} //输出顺序结果:cdasd-obj1-12-栈1 (先进后出,后进先出)
Console.WriteLine("\n");
sk.Pop(); //移除顶部的对象
IEnumerator en1 = sk.GetEnumerator();
while (en1.MoveNext())
{
Console.WriteLine("移除顶部后:{0}",en1.Current);
}//结果:obj1-12-栈1
Console.ReadKey();
6)LinkedList<T>是一个双向链表数据结构;链表不但可以存储元素,还可以存储其前一个和后一个的引用信息,
同时,使用LinkedList,可以快速实现袁术的插入和删除操作,只需要修改Next和Previous的引用
同时,使用LinkedList,可以快速实现袁术的插入和删除操作,只需要修改Next和Previous的引用
代码:
string[] str = new string[] { "字符串1", "casa", "链表1", "sdcd", "链表lianbiao" };
LinkedList<string> ll = new LinkedList<string>(str);
IEnumerator<string> en = ll.GetEnumerator();
while (en.MoveNext())
{
Console.WriteLine(en.Current);
}
Console.WriteLine("\n");
//向某个节点的前后添加元素
LinkedListNode<string> lln = ll.Find("链表1"); /*从链表的开头开始搜索传送给它的元素,并返回一个LinkedListNode<T>
LinkedList<string> ll = new LinkedList<string>(str);
IEnumerator<string> en = ll.GetEnumerator();
while (en.MoveNext())
{
Console.WriteLine(en.Current);
}
Console.WriteLine("\n");
//向某个节点的前后添加元素
LinkedListNode<string> lln = ll.Find("链表1"); /*从链表的开头开始搜索传送给它的元素,并返回一个LinkedListNode<T>
而FindLast与它类似,只是从结尾开始搜索 */
ll.AddBefore(lln, "链表1前添加");
ll.AddAfter(lln, "链表1后添加");
IEnumerator<string> en1 = ll.GetEnumerator();
while (en1.MoveNext())
{
Console.WriteLine(en1.Current);
}
Console.WriteLine("\n");
//向链表添加开始和最后位置添加元素
ll.AddFirst("链表第一个");
ll.AddLast("链表最后一个");
IEnumerator<string> en2 = ll.GetEnumerator();
while (en2.MoveNext())
{
Console.WriteLine(en2.Current);
}
Console.ReadKey();
ll.AddBefore(lln, "链表1前添加");
ll.AddAfter(lln, "链表1后添加");
IEnumerator<string> en1 = ll.GetEnumerator();
while (en1.MoveNext())
{
Console.WriteLine(en1.Current);
}
Console.WriteLine("\n");
//向链表添加开始和最后位置添加元素
ll.AddFirst("链表第一个");
ll.AddLast("链表最后一个");
IEnumerator<string> en2 = ll.GetEnumerator();
while (en2.MoveNext())
{
Console.WriteLine(en2.Current);
}
Console.ReadKey();
7)List<T>表示可通过索引访问的对象的强类型列表
代码:
List<string> lt = new List<string>();
lt.Add("列表元素1");
lt.Add("列表元素2");
lt.Add("cascavasd");
lt.Add("adsdasdaxaxdadx");
Console.WriteLine("排序前输出:");
for (int i = 0; i < lt.Count; i++)
{
Console.WriteLine(lt[i]);
}
Console.WriteLine("列表元素2位置:{0}", lt.IndexOf("列表元素2")); //IndexOf方法是搜索列表的位置
lt.Sort(); //排序
Console.WriteLine("\n");
Console.WriteLine("排序后输出:");
for (int i = 0; i < lt.Count; i++)
{
Console.WriteLine(lt[i]);
}
/*BinarySearch方法 如果找到 item,则为已排序的 List<(Of <(T>)>) 中 item 的从零开始的索引;
否则为一个负数,该负数是大于 item 的第一个元素的索引的按位求补。如果没有更大的元素,则为 Count 的按位求补 */
Console.WriteLine("寻找列表元素2的位置为:{0}", lt.BinarySearch("列表元素2")); //搜索元素的位置,从0开始索引
Console.ReadKey();
lt.Add("列表元素1");
lt.Add("列表元素2");
lt.Add("cascavasd");
lt.Add("adsdasdaxaxdadx");
Console.WriteLine("排序前输出:");
for (int i = 0; i < lt.Count; i++)
{
Console.WriteLine(lt[i]);
}
Console.WriteLine("列表元素2位置:{0}", lt.IndexOf("列表元素2")); //IndexOf方法是搜索列表的位置
lt.Sort(); //排序
Console.WriteLine("\n");
Console.WriteLine("排序后输出:");
for (int i = 0; i < lt.Count; i++)
{
Console.WriteLine(lt[i]);
}
/*BinarySearch方法 如果找到 item,则为已排序的 List<(Of <(T>)>) 中 item 的从零开始的索引;
否则为一个负数,该负数是大于 item 的第一个元素的索引的按位求补。如果没有更大的元素,则为 Count 的按位求补 */
Console.WriteLine("寻找列表元素2的位置为:{0}", lt.BinarySearch("列表元素2")); //搜索元素的位置,从0开始索引
Console.ReadKey();
8)位数组BitArray可以以数组的方式处理许多位
BitArray类实现一个位结构,它表示一个二进制位(1和0)的集合.这些1和0表示Boolean值,其中二进制1表示true,二进制0表示false.
BitArray类实现一个位结构,它表示一个二进制位(1和0)的集合.这些1和0表示Boolean值,其中二进制1表示true,二进制0表示false.
代码:
BitArray ba1 = new BitArray(4);
BitArray ba2 = new BitArray(4);
ba1[0] = ba1[2] = false;
ba1[1] = ba1[3] = true;
ba2[0] = ba2[1] = true;
ba2[2] = ba2[3] = false;
IEnumerator en1 = ba1.GetEnumerator(); //列举器1
Console.WriteLine("ba1数组位执行前:");
while (en1.MoveNext())
{
Console.Write("{0}",en1.Current); //输出位数组ba1的位结果
}
Console.WriteLine("\n");
IEnumerator en2 = ba2.GetEnumerator(); //列举器2
Console.WriteLine("ba2数组位执行前:");
while (en2.MoveNext())
{
Console.Write("{0}", en2.Current); //输出位数组ba1的位结果
}
Console.WriteLine("\n");
//如果两个操作数均为 true,则按位 AND 运算返回 true;如果一个或两个操作数为 false,则按位 AND 运算返回 false
#region 其他运算:
/*还有其他运算如 Or方法:如果一个或两个操作数为 true,则按位“或”运算返回 true;如果两个操作数都为 false,
则按位“或”运算返回 false
Xor方法:如果恰好只有一个操作数为 true,则按位“异或”运算返回 true;如果两个操作数的布尔值相同,
则按位“异或”运算返回 false */
#endregion
BitArray ba3 = ba1.And(ba2);
IEnumerator en3 = ba3.GetEnumerator(); //列举器3
Console.WriteLine("ba1和ba2数组位按照and运算执行:");
while (en3.MoveNext())
{
Console.Write("{0}", en3.Current);
}
Console.ReadKey();
BitArray ba2 = new BitArray(4);
ba1[0] = ba1[2] = false;
ba1[1] = ba1[3] = true;
ba2[0] = ba2[1] = true;
ba2[2] = ba2[3] = false;
IEnumerator en1 = ba1.GetEnumerator(); //列举器1
Console.WriteLine("ba1数组位执行前:");
while (en1.MoveNext())
{
Console.Write("{0}",en1.Current); //输出位数组ba1的位结果
}
Console.WriteLine("\n");
IEnumerator en2 = ba2.GetEnumerator(); //列举器2
Console.WriteLine("ba2数组位执行前:");
while (en2.MoveNext())
{
Console.Write("{0}", en2.Current); //输出位数组ba1的位结果
}
Console.WriteLine("\n");
//如果两个操作数均为 true,则按位 AND 运算返回 true;如果一个或两个操作数为 false,则按位 AND 运算返回 false
#region 其他运算:
/*还有其他运算如 Or方法:如果一个或两个操作数为 true,则按位“或”运算返回 true;如果两个操作数都为 false,
则按位“或”运算返回 false
Xor方法:如果恰好只有一个操作数为 true,则按位“异或”运算返回 true;如果两个操作数的布尔值相同,
则按位“异或”运算返回 false */
#endregion
BitArray ba3 = ba1.And(ba2);
IEnumerator en3 = ba3.GetEnumerator(); //列举器3
Console.WriteLine("ba1和ba2数组位按照and运算执行:");
while (en3.MoveNext())
{
Console.Write("{0}", en3.Current);
}
Console.ReadKey();
----------------------
Windows Phone 7手机开发、
.Net培训、期待与您交流! ----------------------