随笔
#region 数组
int[] lengths = new int[2] { 3, 5 };
int[] starts = new int[2] { 2, 3 };
//简历数组
Array myArray = Array.CreateInstance(typeof(string), lengths, starts);
//初始化数组
for (int i = myArray.GetLowerBound(0); i <= myArray.GetUpperBound(0); i++)
{
for (int j = myArray.GetLowerBound(1); j <= myArray.GetUpperBound(1); j++)
{
}
}
#endregion
#region HashTable操作
//像Hashtable里面添加值
Hashtable ht = new Hashtable();
ht.Add("BMW", "宝马");
ht.Add("FRERARI", "法拉利");
ht.Add("FORD", "福特");
//删除福特元素
ht.Remove("FORD");
//修改Hashtable里面的值
Hashtable ht1 = new Hashtable();
ht1.Add("BMW", "宝马");
ht1.Add("FERRARI", "法拉利");
ht1.Add("FORD", "福特");
ht1["BMW"] = "别摸我";
Hashtable ht2 = new Hashtable();
ht2.Add("BMW","宝马");
ht2.Add("FERRARI","法拉利");
ht2.Add("FORD","福特");
string s = ht2["BMW"] as string;
//通过DictionaryEntry dic in ht
foreach (DictionaryEntry dic in ht2)
{
string key = dic.Key as string;
string value = dic.Value as string;
}
//通过键集合来遍历Hashtable
foreach (string skey in ht2.Keys)
{
string value = ht[skey] as string;
}
Hashtable ht = new Hashtable();
ht.Add("BENZ", "奔驰");
ht.Add("BMW", "宝马");
//假如集合中没有键"Cadillac"则添加元素
if (!ht.Contains("CADILLAC"))
ht.Add("CADILLAC", "凯迪拉克");
//假如集合中没有值"丰田"则添加元素
if (!ht.ContainsValue("丰田"))
ht.Add("TOYOTA", "丰田");
//显示元素个数
Console.WriteLine("目前元素个数:{0}", ht.Count);
Console.WriteLine("目前元素有:");
//遍历元素
foreach (DictionaryEntry de in ht)
{
Console.WriteLine("KEY=\"{0}\"tValue=\"{1}\"", de.Key, de.Value);
}
ht.Remove("BENZ");
//利用ArrayList对Hashtable键值进行排序
ArrayList aKeys = new ArrayList(ht.Keys);
aKeys.Sort();
//遍历元素
Console.WriteLine("排序后元素:");
foreach (string key in aKeys)
Console.WriteLine("Key=\"{0}\"\tValue=\"{1}\"", key, ht[key].ToString());
//删除所有元素
ht.Clear();
#endregion
#region IEnumerator接口极其使用
ArrayList al = new ArrayList();
al.Add("红酒");
al.Add("白酒");
al.Add("咖啡");
IEnumerator itor = al.GetEnumerator();
while (itor.MoveNext())
{
//Current返回Object对象,所以要进行类型转换
string val = itor.Current as string;
//输出获得的结果
Console.WriteLine(val);
}
string[] drinks = { "红酒", "白酒", "咖啡" };
IEnumerator ie = drinks.GetEnumerator();
while (ie.MoveNext())
{
string val = ie.Current as string;
Console.WriteLine(val);
}
Hashtable cars = new Hashtable();
cars.Add("ROLLS-ROYCE", "劳斯莱斯");
cars.Add("LINCOLN", "林肯");
IEnumerator itor = cars.GetEnumerator();
while (itor.MoveNext())
{
//遍历和输出
DictionaryEntry val = (DictionaryEntry)itor.Current;
Console.WriteLine("{0},{1}",val.Key,val.Value);
}
Hashtable cars = new Hashtable();
cars.Add("ROLLS-ROYCE", "劳斯莱斯");
cars.Add("LINCOLN", "林肯");
IDictionaryEnumerator itor = cars.GetEnumerator();
while (itor.MoveNext())
{
//遍历和输出
Console.WriteLine("{0},{1}", itor.Key, itor.Value);
}
#endregion
#region Stack类似于动态数组ArrayList
Stack myStack = new Stack();
myStack.Push("我");
myStack.Push("唉");
myStack.Push("吃");
myStack.Push("冬瓜");
myStack.Push("thanks");
Console.WriteLine("{0}", myStack.Pop());
foreach (object obj in myStack)
{
Console.WriteLine("{0}", obj);
}
#endregion
#region Queue队列数据结构就是虚拟现实中的排队。队列的操作是先进先出
Queue myQueue = new Queue();
myQueue.Enqueue("我");
myQueue.Enqueue("唉");
myQueue.Enqueue("吃东莞");
//出对第一个元素
Console.WriteLine("{0}", myQueue.Dequeue());
//进队第一个元素
myQueue.Enqueue("西瓜");
//显示队列中的所有元素
foreach (object obj in myQueue)
Console.WriteLine("{0}", obj);
#endregion
#region SortedList集合是哈希表和数组的杂交品种
#endregion
#region StringCollection和StringDictionary更方便的操作字符串集合
StringDictionary ht = new StringDictionary();
ht.Add("BMW", "宝马");
ht.Add("FERRARI", "法拉利");
ht.Add("FORD", "福特");
//找到宝马
string s = ht["BMW"];
Console.WriteLine("BMW是{0}", s);
//通过键集合来遍历StringDictionary
foreach (string skey in ht.Keys)
{
string value = ht[skey];
Console.WriteLine("{0},{1}", skey, value);
}
#endregion
#region 泛型哈希表-Dictionary
Dictionary<string, string> oscar = new Dictionary<string, string>();
oscar.Add("哈莉贝瑞", "《死囚之舞》");
oscar.Add("朱迪单期", "《携手人生》");
oscar.Add("内科而基德曼", "《红磨坊》");
oscar.Add("坚尼弗康纳利", "《美丽心灵》");
oscar.Add("雷尼奇伟哥", "《BJ单身日记》");
//删除元素
oscar.Remove("坚尼弗康纳利");
//假如不存在元素则加入元素
if (!oscar.ContainsKey("西西斯派克"))
oscar.Add("西西斯派克", "《不伦之恋》");
//显示容量和元素个数
Console.WriteLine("74届奥斯卡最佳女主角及其电影:");
foreach (KeyValuePair<string, string> kvp in oscar)
{
Console.WriteLine("姓名:{0},电影:{1}", kvp.Key, kvp.Value);
}
//得到hash表中键的集合
Dictionary<string, string>.KeyCollection keyColl = oscar.Keys;
//遍历间的集合
Console.WriteLine("最佳女主角:");
foreach (string s in keyColl)
{
Console.WriteLine(s);
}
//使用TryGetValue方法获取指定键对应的值
string slove = string.Empty;
if (oscar.TryGetValue("朱迪单期", out slove))
Console.WriteLine("我最喜欢朱迪单期的电影{0}", slove);
else
Console.WriteLine("没找到朱迪单期的电影");
oscar.Clear();
#endregion
#region 泛型队列
Queue<string> oscarcn = new Queue<string>();
oscarcn.Enqueue("中国式离婚");
oscarcn.Enqueue("东京审判");
oscarcn.Enqueue("满城尽带黄金甲");
oscarcn.Enqueue("落叶归根");
foreach (string number in oscarcn)
{
Console.WriteLine(number);
}
//出对
Console.WriteLine("出对:{0}", oscarcn.Dequeue());
Console.WriteLine("出对:{0}", oscarcn.Dequeue());
//如果不包含该元素则仅对
if (!oscarcn.Contains("疯狂的石头"))
oscarcn.Enqueue("疯狂的石头");
Console.WriteLine("元素个数:{0}", oscarcn.Count);
//将队列copy到数组中
string[] arrayC = new string[oscarcn.Count];
oscarcn.CopyTo(arrayC, 0);
//遍历数组
Console.WriteLine("2006年中国最佳影片");
foreach (string number in arrayC)
{
Console.WriteLine(number);
}
oscarcn.Clear();
#endregion
#region 泛型栈
Stack<string> numbers = new Stack<string>();
numbers.Push("\n内心深处都涌动着一段段伤心的故事");
numbers.Push("\n在这个城市里面的每个人");
numbers.Push("\n这是一座充满了伤心的城市");
//遍历栈集合元素
foreach (string number in numbers)
{
Console.WriteLine(number);
}
//进栈
numbers.Push("\n伤城:");
string message = numbers.Pop() + numbers.Pop() + numbers.Pop() + numbers.Pop();
Console.WriteLine(message);
//复制栈元素到数组
string[] arrayC = new string[numbers.Count];
numbers.CopyTo(arrayC, 0);
//清空栈
#endregion
#region 使用线程 我们知道委托可以代表一个方法,所以创建线程实例时只需要在Thread类的构造方法里面传入一个委托实例即可
Thread 线程对象实例 = new Thread(new ThreadStart(方法名));
Thread.CurrentThread.Name = "主线程";
Console.WriteLine("主线程启动");
//在主线程里面创建子线程
Thread th = new Thread(new ThreadStart(ThreadProc));
//启动子线程
th.Start();
//主线程开始数数
for (int i = 0; i < 10; i++)
{
Console.WriteLine("{0}:{1}", Thread.CurrentThread.Name, i);
Thread.Sleep(1);//让当前线程休眠毫秒
}
#endregion
#region 线程的例外一种用法
Thread.CurrentThread.Name = "主线程";
Thread th = new Thread(new ThreadStart(DoWork));
th.Name = "子线程";
th.Start();
DoWork();
#endregion