1、集合web
使用時必須添加 System.Collections數據庫
集合與數組的區別:數組
1:數組聲明瞭它容納的元素的類型,而集合不聲明。這是因爲集合以object形式來存儲它們的元素。初始化時集合無需定義多少個。
2:一個數組實例具備固定的大小,不能伸縮。集合則可根據須要動態改變大小。即,集合是一組可變數量的元素的組合,這些元素可能共享某些特徵,須要某種方式一塊兒操做。通常來講,這些元素的類型是相同的。
3:數組是一種可讀/可寫數據結構沒有辦法建立一個只讀數組。然而能夠使用集合提供的ReadOnly方 只讀方式來使用集合。該方法將返回一個集合的只讀版本。數組是連續的、同一類型的數據的一塊區域,而集合是不連續的、多種數據類型的。
2、集合的分類
1.棧:Stack,先進後出,一個一個賦值,一個一個取值,按順序。數據結構
.count 取集合內元素的個數dom
.push() 將元素一個一個推入集合中//stack集合存入用.push()ide
.pop() 將元素一個個彈出集合spa
.clear() 清空集合code
.clone() 複製對象
eg一、彈出移除數據blog
eg二、彈出不移除數據
string tanchu = ss.Peek().ToString();//只獲取最後進去的那個數據值,不移除
1 Stack s = new Stack();//先存入的後取出 2 s.Push(1); 3 s.Push(2); 4 s.Push(3); 5 6 Console.WriteLine(s.Pop()); //3 7 Console.WriteLine(s.Pop());//2
2.queue:先進先出,一個一個的賦值一個一個的取值,按照順序。
.count 取集合內元素的個數
.Enqueue() 進隊列集合//存入元素
.Dequeue() 出隊列集合
.clear 清空集合
1 Queue q = new Queue(); 2 q.Enqueue(1); 3 q.Enqueue(2); 4 q.Enqueue(3); 5 6 Console.WriteLine(q.Dequeue());//1 7 Console.WriteLine(q.Dequeue());//2 8 Console.WriteLine(q.Dequeue());//3
3.hashtable:先進後出,一個一個賦值,但只能一塊兒取值。
用於處理和表現相似key value的鍵值對,其中key一般可用來快速查找,同時key是區分大小寫;value用於存儲對應於key的值。Hashtable中keyvalue鍵值對均爲object類型,因此Hashtable能夠支持任何類型的key value鍵值對.
.Add(,) 添加key和元素//用於元素添加
.Remove() 將括號內的元素移除
.contains() 判斷集合中是否有括號內的元素
.count 計算集合中元素的個數
1 Hashtable hshTable = new Hashtable(); // 建立哈希表 2 hshTable .Add("Person1", "zhanghf"); // 往哈希表裏添加鍵值對 3 hshTable .Clear(); //移除哈希表裏全部的鍵值對 4 hshTable .Contains("Person1"); //判斷哈希表裏是否包含該鍵 5 string name = (string)hshTable["Person1"].ToString(); //取哈希表裏指定鍵的值 6 hshTable.Remove("Person1"); // 刪除哈希表裏指定鍵的鍵值對 7 IDictionaryEnumerator en = hshTable.GetEnumerator(); // 遍歷哈希表全部的鍵,讀出相應的值 8 while (en.MoveNext()) 9 { 10 string str = en.Value.ToString(); 11 }
目前下面的例子部分還看不懂
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 // 建立一個Hashtable實例 6 Hashtable ht=new Hashtable(); 7 8 // 添加keyvalue鍵值對 9 ht.Add("A","1"); 10 ht.Add("B","2"); 11 ht.Add("C","3"); 12 ht.Add("D","4"); 13 14 // 遍歷哈希表 15 foreach (DictionaryEntry de in ht) 16 { 17 Console.WriteLine("Key -- {0}; Value --{1}.", de.Key, de.Value); 18 } 19 20 // 哈希表排序 21 ArrayList akeys=new ArrayList(ht.Keys); 22 akeys.Sort(); 23 foreach (string skey in akeys) 24 { 25 Console.WriteLine("{0, -15} {1, -15}", skey, ht[skey]); 26 27 } 28 29 // 判斷哈希表是否包含特定鍵,其返回值爲true或false 30 if (ht.Contains("A")) 31 Console.WriteLine(ht["A"]); 32 33 // 給對應的鍵賦值 34 ht["A"] ="你好"; 35 36 // 移除一個keyvalue鍵值對 37 ht.Remove("C"); 38 39 // 遍歷哈希表 40 foreach (DictionaryEntry de in ht) 41 { 42 Console.WriteLine("Key -- {0}; Value --{1}.", de.Key, de.Value); 43 } 44 45 // 移除全部元素 46 ht.Clear(); 47 48 // 此處將不會有任何輸出 49 Console.WriteLine(ht["A"]); 50 Console.ReadKey(); 51 } 52 }
3、結構體
一、結構體定義:至關因而咱們本身定義的一種複雜的類型(能夠說是一個小型的類),它能夠包含int... double float bool char string DateTime 數組類型。生活中大部份的對象都是複合型的對象。爲了面對這些複合型的對象,必需要定義一個相應的結構來知足對象的需求。
a、如何定義結構體類型?
通常來講結構體的定義要放在class的外面或class的裏面,儘可能不放在Main的裏面。
struct 自定義類型名
{
public 變量類型 變量名;
protected 變量類型 變量名;
privated 變量類型 變量名;
......;
......;
}
例如:
struct Student //自定義的數據類型。用來描述學生的信息。
{
public string XueHao;
public string Name;
public int Age;
public double Score;
public bool Sex; (判斷的時候用 條件運算符(三目)來判斷)
}
b、如何用自定義的類型來定義變量?
自定義類型名 變量 = new 自定義類型名();
c、如何使用自定義類型的變量?
變量.子變量 = "xxxx"; Console.WriteLine(變量名.子變量);
eg:
//定義自定義類型的變量
Student zhangsan = new Student();
//給變量賦值
zhangsan.XueHao = "Y001";
zhangsan.Name = "張三";
zhangsan.Age = 22;
zhangsan.Sex = true;
zhangsan.Score = 100;
//對變量取值
Console.WriteLine(zhangsan.XueHao+"\t"+zhangsan.Name+"\t"+zhangsan.Age+"\t"+zhangsan.Score+"\t"+(zhangsan.Sex?"男":"女");
二、例子
a、雙人對戰遊戲
1 class Program 2 { 3 struct Player 4 { 5 public string name; 6 public int blood; 7 public int attack; 8 public int defence; 9 public int shanbi; 10 public ArrayList jineng ; 11 public ArrayList shanghai; 12 } 13 14 static void Main(string[] args) 15 { 16 17 #region 定義技能庫 18 string [] jn = new string[10]{ 19 "橫掃千軍", 20 "嘰嘰歪歪", 21 "龍騰", 22 "降龍十八掌", 23 "大鵬展翅", 24 "一陽指", 25 "六脈神劍", 26 "死亡一指", 27 "恩賜解脫", 28 "破釜沉舟", 29 }; 30 int [] sh = new int[10]{ 31 500, 32 300, 33 350, 34 500, 35 360, 36 400, 37 480, 38 490, 39 500, 40 450 41 }; 42 43 44 #endregion 45 46 Console.WriteLine("請輸入第一個玩家的姓名:"); 47 string name1 = Console.ReadLine(); 48 49 Console.WriteLine("請輸入第二個玩家的姓名:"); 50 string name2 = Console.ReadLine(); 51 52 #region 造玩家,賦初始值 53 54 Player p1 = new Player(); 55 int seed1=0; 56 if (name1.Length == 2) 57 { 58 seed1 = (int)Convert.ToChar(name1.Substring(0, 1)) + (int)Convert.ToChar(name1.Substring(1, 1)); 59 } 60 else 61 { 62 seed1 = (int)Convert.ToChar(name1.Substring(0, 1)) + (int)Convert.ToChar(name1.Substring(1, 1)) + (int)Convert.ToChar(name1.Substring(2, 1)); 63 } 64 Random r1 = new Random(seed1); 65 p1.name = name1; 66 p1.blood = 3000+r1.Next(1500); 67 p1.attack = 200 + r1.Next(100); 68 p1.defence = 80 + r1.Next(50); 69 p1.shanbi = 2+r1.Next(2); 70 p1.jineng = new ArrayList(); 71 p1.shanghai = new ArrayList(); 72 Random rj = new Random(); 73 for(int i=0;i<3;i++) 74 { 75 int jnh = rj.Next(10); 76 string jnm = jn[jnh]; 77 if (!p1.jineng.Contains(jnm)) 78 { 79 p1.jineng.Add(jnm); 80 p1.shanghai.Add(sh[jnh]); 81 } 82 else 83 { 84 i--; 85 } 86 } 87 88 Player p2 = new Player(); 89 int seed2 = 0; 90 if (name2.Length == 2) 91 { 92 seed2 = (int)Convert.ToChar(name2.Substring(0, 1)) + (int)Convert.ToChar(name2.Substring(1, 1)); 93 } 94 else 95 { 96 seed2 = (int)Convert.ToChar(name2.Substring(0, 1)) + (int)Convert.ToChar(name2.Substring(1, 1)) + (int)Convert.ToChar(name2.Substring(2, 1)); 97 } 98 Random r2 = new Random(seed2); 99 p2.name = name2; 100 p2.blood = 3000 + r2.Next(1500); 101 p2.attack = 200 + r2.Next(100); 102 p2.defence = 80 + r2.Next(50); 103 p2.shanbi = 2 + r2.Next(2); 104 p2.jineng = new ArrayList(); 105 p2.shanghai = new ArrayList(); 106 107 for (int i = 0; i < 3; i++) 108 { 109 int jnh = rj.Next(10); 110 string jnm = jn[jnh]; 111 if (!p2.jineng.Contains(jnm)) 112 { 113 p2.jineng.Add(jnm); 114 p2.shanghai.Add(sh[jnh]); 115 } 116 else 117 { 118 i--; 119 } 120 } 121 122 123 #endregion 124 125 #region 顯示玩家基礎信息 126 Console.WriteLine("玩家1:姓名:{0},血量{1},攻擊力{2},防護{3},閃避{4},所會技能1:{5},所會技能2:{6},所會技能3:{7}",p1.name,p1.blood,p1.attack,p1.defence,p1.shanbi,p1.jineng[0],p1.jineng[1],p1.jineng[2]); 127 Console.WriteLine("玩家2:姓名:{0},血量{1},攻擊力{2},防護{3},閃避{4},所會技能1:{5},所會技能2:{6},所會技能3:{7}", p2.name, p2.blood, p2.attack, p2.defence, p2.shanbi, p2.jineng[0], p2.jineng[1], p2.jineng[2]); 128 #endregion 129 130 Console.WriteLine("--------------------------------------------"); 131 132 Console.WriteLine("請按空格鍵開始對戰"); 133 ConsoleKeyInfo key = Console.ReadKey(); 134 Console.Clear(); 135 if (key.Key.ToString().ToLower() == "spacebar") 136 { 137 #region 對戰 138 139 while (true) 140 { 141 //判斷退出條件 142 if (p1.blood == 0 && p2.blood == 0) 143 { 144 Console.ForegroundColor = ConsoleColor.Yellow; 145 Console.WriteLine("玉石俱焚了!"); 146 break; 147 } 148 else if (p1.blood == 0) 149 { 150 Console.ForegroundColor = ConsoleColor.Gray; 151 Console.WriteLine(p2.name + "將" + p1.name + "KO了。。。"); 152 break; 153 } 154 else if (p2.blood == 0) 155 { 156 Console.ForegroundColor = ConsoleColor.Gray; 157 Console.WriteLine(p1.name + "將" + p2.name + "KO了。。。"); 158 break; 159 } 160 161 //開始打 162 #region p1打p2 163 //p1對p2進行毆打 164 Random rdz = new Random(); 165 int dz1 = rdz.Next(10); 166 if (dz1 > 7) //使用大招 167 { 168 int dzs = rdz.Next(3); 169 Console.ForegroundColor = ConsoleColor.White; 170 Console.WriteLine(p1.name + "使用了" + p1.jineng[dzs] + ",對" + p2.name + "形成了" + p1.shanghai[dzs] + "傷害!"); 171 p2.blood = p2.blood - Convert.ToInt32(p1.shanghai[dzs]); 172 if (p2.blood <= 0) 173 { 174 p2.blood = 0; 175 } 176 } 177 else //普通攻擊 178 { 179 int ptgjsb = rdz.Next(10); 180 if (ptgjsb < p2.shanbi) //p2閃避 181 { 182 Console.ForegroundColor = ConsoleColor.Green; 183 Console.WriteLine(p2.name + "躲避了" + p1.name + "的此次攻擊!"); 184 } 185 else //未閃避 186 { 187 int p2sh = (p1.attack + rdz.Next(50)) - (p2.defence + rdz.Next(20)); 188 Console.ForegroundColor = ConsoleColor.Red; 189 Console.WriteLine(p1.name + "對" + p2.name + "進行了普通攻擊,形成了" + p2sh + "傷害!"); 190 p2.blood = p2.blood - p2sh; 191 if (p2.blood <= 0) 192 { 193 p2.blood = 0; 194 } 195 } 196 197 } 198 #endregion 199 #region P2打P1 200 //p1對p2進行毆打 201 int dz2 = rdz.Next(10); 202 if (dz2 > 7) //使用大招 203 { 204 int dzs = rdz.Next(3); 205 Console.ForegroundColor = ConsoleColor.White; 206 Console.WriteLine(p2.name + "使用了" + p2.jineng[dzs] + ",對" + p1.name + "形成了" + p2.shanghai[dzs] + "傷害!"); 207 p1.blood = p1.blood - Convert.ToInt32(p2.shanghai[dzs]); 208 if (p1.blood <= 0) 209 { 210 p1.blood = 0; 211 } 212 } 213 else //普通攻擊 214 { 215 int ptgjsb = rdz.Next(10); 216 if (ptgjsb < p1.shanbi) //p2閃避 217 { 218 Console.ForegroundColor = ConsoleColor.Green; 219 Console.WriteLine(p1.name + "躲避了" + p2.name + "的此次攻擊!"); 220 } 221 else //未閃避 222 { 223 int p1sh = (p2.attack + rdz.Next(50)) - (p1.defence + rdz.Next(20)); 224 Console.ForegroundColor = ConsoleColor.Red; 225 Console.WriteLine(p2.name + "對" + p1.name + "進行了普通攻擊,形成了" + p1sh + "傷害!"); 226 p1.blood = p1.blood - p1sh; 227 if (p1.blood <= 0) 228 { 229 p1.blood = 0; 230 } 231 } 232 233 } 234 #endregion 235 236 Console.ForegroundColor = ConsoleColor.DarkYellow; 237 Console.WriteLine(p1.name + "的剩餘血量爲:" + p1.blood + ", " + p2.name + "的剩餘血量爲:" + p2.blood); 238 239 Console.ForegroundColor = ConsoleColor.White; 240 Console.WriteLine("-----------------------------------------"); 241 Console.WriteLine(); 242 Thread.Sleep(2000); 243 244 245 246 } 247 248 #endregion 249 250 } 251 } 252 }
b、輸出學生成績,並按總成績排序
1 //輸出學生成績,用泛型集合 添加student 結構體類型的集合,比較好用。若是用arraylist 則得用多個集合湊起來,同時完成! 2 static void Main11444(string[] args) 3 { 4 List<student> a = new List<student>();//至關於表格的列(個數),每一個學生的內容 至關於列 5 Console.WriteLine("請輸入總人數:"); 6 int b = int.Parse(Console.ReadLine()); 7 //student[] r = new student[b];//也能夠這麼定義 8 9 for (int i = 0; i < b; i++) 10 { 11 student s = new student(); 12 Console.WriteLine("請輸入第{0}個學員的姓名:", i + 1); 13 //a[i].name = Console.ReadLine(); 14 s.name = Console.ReadLine(); 15 16 Console.WriteLine("請輸入第{0}個學員的年齡:", i + 1); 17 s.age = int.Parse(Console.ReadLine()); 18 19 Console.WriteLine("請輸入第{0}個學員的性別:", i + 1); 20 s.sex = Console.ReadLine(); 21 22 Console.WriteLine("請輸入第{0}個學員的Csharp成績:", i + 1); 23 s.Csharp = Convert.ToDouble(Console.ReadLine()); 24 25 Console.WriteLine("請輸入第{0}個學員的數據庫成績:", i + 1); 26 s.database = Convert.ToDouble(Console.ReadLine()); 27 28 Console.WriteLine("請輸入第{0}個學員的網頁成績:", i + 1); 29 s.web = Convert.ToDouble(Console.ReadLine()); 30 31 //Console.WriteLine("請輸入第{}個學員的姓名:", i + 1); 32 s.sum = s.web + s.Csharp + s.database; 33 34 a.Add(s); 35 } 36 37 for (int i = 0; i < a.Count - 1; i++) 38 { 39 for (int j = 0; j < a.Count - 1 - i; j++) 40 { 41 if (a[j].sum < a[j + 1].sum) 42 { 43 student s = new student(); 44 s = a[j]; 45 a[j] = a[j + 1]; 46 a[j + 1] = s; 47 } 48 } 49 } 50 51 Console.WriteLine("姓名\t年齡\t性別\tCsharp成績\t數據庫成績\t網頁成績\t總成績"); 52 53 foreach (student o in a) 54 { 55 Console.WriteLine(o.name + "\t" + o.age + "\t" + o.sex + "\t" + o.Csharp + "\t" + o.database + "\t" + o.web + "\t" + o.sum); 56 } 57 }