c#面向?qū)ο?--集合ArrayList(List)/HashTable(字典Dictionary)/三個(gè)高級(jí)參數(shù)out、ref 、params/字符串轉(zhuǎn)浮點(diǎn)數(shù)double.TryParse用法

1.集合ArrayList(List)

  • F12轉(zhuǎn)到定義
  • ArrayList集合
    1.數(shù)組的瓶頸:長度不可變、類型單一
    集合的優(yōu)勢:長度可以任意改變、類型隨便


    圖1:根據(jù)里氏轉(zhuǎn)換,這里放入任何對(duì)象都可以,因?yàn)閛bject是所有類的基類

    圖2:ArrayList集合使用(ArrayList沒有l(wèi)ength變量,有count跟length效果一樣)

    圖3:在上圖的基礎(chǔ)上加入了新的集合元素(5000m是指decimal類型)

    圖4:打印出來的結(jié)果是這些新元素的命名空間
  • 將一個(gè)對(duì)象輸出到控制臺(tái),默認(rèn)情況下,打印的是這個(gè)對(duì)象所在的類的命名空間。


    圖5:執(zhí)行結(jié)果打印的是這個(gè)對(duì)象所在的類的命名空間

    圖6:List[i]是Object的子類,所以才可以如此轉(zhuǎn)換

    圖7:解決圖4的問題

    圖8:ArrayList這里還不正常
  • 綜上所述,想引入數(shù)組、對(duì)象和ArrayList本身就很麻煩。這里還有對(duì)象.AddRange();方法
    對(duì)象.AddRange()和對(duì)象.Clear()方法

ArrayList的各種方法

對(duì)象.Clear();清空所有元素;
對(duì)象.Remove();清空單個(gè)元素,想刪誰()里放誰;
對(duì)象.RemoveAt();根據(jù)索引刪除,想刪誰()里放誰的索引;
對(duì)象.RemoveRange(a,b);刪除一定范圍內(nèi)的值,a填索引,表示從哪個(gè)位置開始刪除;b填刪除幾個(gè);
對(duì)象.Reverse();把整個(gè)ArrayList進(jìn)行反轉(zhuǎn);
對(duì)象.Sort();升序排列,bool和string等無法排序;
對(duì)象.Insert(a,b);在指定索引處插入一個(gè)值,其中a填指定索引處,b填要插入的值;(插入的值是任意類型的)
對(duì)象.InsertRange(a,b);在指定索引處插入一個(gè)集合,其中a填指定索引處,b填要插入的集合(如數(shù)組);
對(duì)象.Contains();()里面填寫要驗(yàn)證是否存在的值,此函數(shù)返回一個(gè)bool類型的變量;

這里第二次執(zhí)行時(shí)依然不會(huì)有else的結(jié)果出現(xiàn),因?yàn)锳rrayList不存儲(chǔ)數(shù)據(jù),需要在if-else判斷外面加一條List.Add();才會(huì)出現(xiàn)else的結(jié)果

ArrayList的長度

  • count:表示這個(gè)集合中實(shí)際包含的元素個(gè)數(shù);
  • capacity:表示這個(gè)集合中可以包含的元素的個(gè)數(shù);
    count=0時(shí),capacity=0;
    count=4時(shí),capacity=4;
    count=5時(shí),capacity=8;//capacity是能容納count數(shù)的2的最小次方;

2.練習(xí)

  • 練習(xí)1:創(chuàng)建一個(gè)集合,里面添加一些數(shù)字,求平均值與和;


    這里還是里氏轉(zhuǎn)換,list雖然是object類的,但是里面放的是int類型的數(shù)據(jù),因此可以強(qiáng)制轉(zhuǎn)換為int類型的
  • 練習(xí)2:寫一個(gè)長度為10的集合,要求里面隨機(jī)的添加10個(gè)數(shù)字(0-9),但是要求所有數(shù)字不重復(fù);


    1.不能寫i<list.Count;因?yàn)槌跏糲ount為0;2.不要忘記寫else不然顯示的數(shù)字可能少于10個(gè)

3.Hashtable鍵值對(duì)集合(字典)

  • 鍵值對(duì)集合里面填入的數(shù)據(jù)類型都是string類型的;
  • 在鍵值對(duì)集合中,是根據(jù)鍵去找值的;鍵必須是唯一的,值可以是重復(fù)的;
  • 鍵值對(duì)對(duì)象[鍵]=值;


    在鍵值對(duì)集合中,不能用for循環(huán)來輸出每一個(gè)元素,如上所示,false這一項(xiàng)就遍歷不到
ht.Add(6,"哈哈哈");
ht[6]="哈哈哈";//兩種添加數(shù)據(jù)的方式,這種不會(huì)沖突,相當(dāng)于重新賦值
  • 遍歷Hashtable方法foreach循環(huán)

for+兩下tab鍵,整體的框架都出來了

foreach(var item in collection)  //foreach(var item in ht.Keys)
{                                //Console.WriteLine(item,ht[item]);
}
//item 表示集合里面的每一項(xiàng)  
//collection表示集合

c#是一門強(qiáng)類型語言:在代碼當(dāng)中,必須對(duì)每一個(gè)變量的類型有一個(gè)明確的定義
js是一門弱類型語言:任何類型都可以使用var定義,不考慮是什么類型

  • var
    1.c#里面的var與js里面的不同,c#里面的var會(huì)根據(jù)值推斷類型,也就是說最終拿到的值是有明確類型的,如int、float、char等
    2.在使用var關(guān)鍵字進(jìn)行聲明的時(shí)候必須賦初值,否則報(bào)錯(cuò)(因?yàn)関ar無法推斷類型)(因?yàn)楹芏嘀涤捎脩糨斎耄荒苌蟻砭蛯懰酪虼藇ar不常用)
  • 循環(huán)數(shù)量很大時(shí),foreach循環(huán)的效率大大高于for循環(huán)(循環(huán)數(shù)量不大時(shí)差別不大)

4.Hashtable鍵值對(duì)函數(shù)

鍵值對(duì)對(duì)象.Contains()返回bool類型的變量,查看是否包含鍵;
鍵值對(duì)對(duì)象.ContainsKey()與Contains作用相同;
鍵值對(duì)對(duì)象.ContainsValue()返回bool類型的變量,查看是否包含值;
鍵值對(duì)對(duì)象.Clear()移除所有集合中所有元素;
鍵值對(duì)對(duì)象.Remove() 根據(jù)鍵去移除;

5.練習(xí):繁簡轉(zhuǎn)換

namespace foreach循環(huán)
{
    class Program
    {
        static void Main(string[] args)
        {
            string jian = "0123456789";
            string fan = "零一二三四五六七八九";
            Hashtable ht = new Hashtable();
            for (int i = 0; i < jian.Length; i++)
            {
                ht.Add(jian[i],fan[i]);
            }
            Console.WriteLine("請(qǐng)輸入一段數(shù)字:");
            string input = Console.ReadLine();
            for(int i=0;i<input.Length;i++)
            {
                if (jian.Contains(input[i]))
                    Console.Write(ht[input[i]]);
                else
                    Console.Write(input[i]);
            }
            Console.ReadKey();
        }
    }
}
執(zhí)行效果

6.學(xué)習(xí)三個(gè)高級(jí)參數(shù)out、ref 、params

  • out用法
    使用情景:返回多個(gè)相同類型的值可以使用數(shù)組,但是如果要返回多個(gè)不同類型的值需要用out參數(shù)(out參數(shù)也可以返回多個(gè)相同類型的值)。
    步驟
    1)在參數(shù)列表里聲明變量時(shí)每一個(gè)前面都加一個(gè)out,out表示這個(gè)參數(shù)是我要多余返回的值。
    圖1
    2)帶out的參數(shù)要求在方法的內(nèi)部必須為其賦值
    3)調(diào)用帶out參數(shù)的方法時(shí),要提前聲明需要out 的變量(如下圖所示的min,max,avg等,必須聲明但可以不賦值,因?yàn)榈?步會(huì)給賦值),并在多余返回的值前面加out
    圖2:計(jì)算最大值、最小值、均值、總和
  • ref用法
    圖3:計(jì)算工資
    如圖所示,main函數(shù)執(zhí)行完輸出的salary為5000,Main函數(shù)雖然調(diào)用了jiangjin函數(shù),但是jiangjin函數(shù)沒有返回值。
    使用情景:如圖3所示,如果想得到5500這個(gè)答案,(需要聲明一個(gè)值用來接收jiangjin函數(shù)的返回值,jiangjin函數(shù)的void要變成int且需要return)或者使用ref。ref參數(shù)能夠?qū)⒁粋€(gè)變量帶入一個(gè)方法種改變,并將改變后的結(jié)果帶出參數(shù)。
    步驟
    1)在jiangjin函數(shù)參數(shù)列表中加ref(double s變成ref double s)
    2)調(diào)用jiangjin函數(shù)時(shí)傳入的參數(shù)加上ref【jiangjin(salary)變成jiangjin(ref salary)】
    注意:out方法必須在方法內(nèi)賦值(因?yàn)閛ut是多余返回的值),ref方法需要在方法外方法執(zhí)行前賦值(因?yàn)閞ef是帶進(jìn)又帶出)。
  • params可變參數(shù)用法
    圖4:計(jì)算各科總分

    使用情景: 這里出現(xiàn)的問題,一個(gè)是數(shù)組s內(nèi)的變量可能會(huì)增加(考試科目變多),一個(gè)是聲明變量越少越好(省空間)params的作用是將實(shí)參列表中跟可變參數(shù)數(shù)組類型一致的元素都當(dāng)作數(shù)組的元素去處理。
    步驟
    圖5:使用params把單個(gè)變量處理成數(shù)組

    注意:params參數(shù)數(shù)組必須是形參列表的最后一項(xiàng)。
n1=n1-n2;
n2=n1+n2;
n2=n2-n1;//不用臨時(shí)變量交換兩個(gè)數(shù)的值

7. double.TryParse用法

相同:double.TryParse方法和double.Parse方法都可以將字符串string轉(zhuǎn)換為double類型
不同:最重要的區(qū)別在于double.TryParse方法在字符串無法轉(zhuǎn)換為double類型的情況下不會(huì)引發(fā)程序異常,而double.Parse方法則是直接拋出程序異常。
double.TryParse方法在無法轉(zhuǎn)換的情況下返回false,并且使用了out參數(shù)進(jìn)行轉(zhuǎn)換。

double.TryParse方法的簽名為:static bool TryParse(string s, out Double result)這個(gè)的返回值是布爾類型,多余返回一個(gè)轉(zhuǎn)化完的double類型的結(jié)果。
double.Parse方法的簽名為:static Double Parse(string s)這個(gè)返回值類型是轉(zhuǎn)化后的結(jié)果,即double類型。

使用double.TryParse方法進(jìn)行類型轉(zhuǎn)換的時(shí)候,double變量無需先行賦值(但要聲明),在調(diào)用double.TryParse方法后,將自動(dòng)帶出結(jié)果值。

string轉(zhuǎn)double的三種方式

string numStr = "33.44";
 
          double numDouble1 = double.Parse(numStr);
          double numDouble2 =Convert.ToDouble(numStr);
          double numDouble3;
          if (!double.TryParse(numStr, out numDouble3))
          {
              numDouble3 = 0D;
          }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 今天感恩節(jié)哎,感謝一直在我身邊的親朋好友。感恩相遇!感恩不離不棄。 中午開了第一次的黨會(huì),身份的轉(zhuǎn)變要...
    余生動(dòng)聽閱讀 10,858評(píng)論 0 11
  • 彩排完,天已黑
    劉凱書法閱讀 4,479評(píng)論 1 3
  • 沒事就多看看書,因?yàn)楦褂性姇鴼庾匀A,讀書萬卷始通神。沒事就多出去旅游,別因?yàn)闆]錢而找借口,因?yàn)橹灰闶〕詢€用,來...
    向陽之心閱讀 4,973評(píng)論 3 11
  • 表情是什么,我認(rèn)為表情就是表現(xiàn)出來的情緒。表情可以傳達(dá)很多信息。高興了當(dāng)然就笑了,難過就哭了。兩者是相互影響密不可...
    Persistenc_6aea閱讀 129,666評(píng)論 2 7

友情鏈接更多精彩內(nèi)容