C#之基础3---④(ArrayList \List \Hashtable \Dictionary区别,火星文,File,英汉翻译)

一、概念类

①、集合(ArrayList),泛集合(List<>),哈希表(Hashtable),字典(Dictionary<>)区别

      NN~~不知道存什么类型,不知道存多少个------集合(ArrayList)-------需要导入using System.Collections命名空间。

      NY~~知道存什么类型,不知道存多少个------泛集合(List< >)------不需要导入命名空间。

      YY~~知道存什么类型,知道存多少个------数组(int[ ])------不需要导入命名空间。

      键值为Object类型,即任意类型------哈希表(Hashtable)------需要导入using System.Collections命名空间。

      键值为string类型,char类型------字典(Dictionary<>)------不需要导入命名空间。

总结:带有< >符号的都是知道什么类型的,<>符号中放类型,不带这个符号的是随意类型即Object类型。

②、编码ANSI,Unicode,UTF-8分别代表什么?

      ANSI:目前计算机中用的最广泛的字符集及其编码,是由美国国家标准局(ANSI)制定的ASCII码(American Standard Code for Information Interchange 美国标准信息交换码),它已被国际标准化组织(ISO)定位国际标准,成为ISO 646标准。适用于所有拉丁文字字母,ASCII码有7位码和8位码两种形式。

      Unicode:拓展在ASCII字元集。在严格的ASCII中,每个字元用7位元表示,或者电脑上普通使用的每字元有8位元素;而Unicode使用16位元字元素。这是的Unicode能够表示世界上所有的书写语言中可能用于电脑通讯的字元、象形文字和其他符号。Unicode最初打算作为ASCII的补充,可能的话,最终将替代他。考虑到ASCII是电脑中最具支配地位的标准,所以这的确是一个很高的目标。

      UTF-8:是Unicode的一种变长字符编码又称万国码,由KenThompson与1992年创建。现在已经标准化为RFC 3629。UTF-8用1-6个字节编码Unicode字符,用在网页上可以可以统一页面显示中文简体繁体及其它语言(韩文等)。

二、图类

①、如果获取字符串中指定位置的char对象

三、代码类

①、Dictionary<>的使用

            static void Main(string[] args)
            {
            Dictionary<char, string> dic = new Dictionary<char, string>();     //实例化一个字典类
                                                                               //将常量字符串变量ChaiZi进行切割,切割空白项,并把切割结果赋值给chaizi字符串数组变量
            string[] chaizi = ChaiZi.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries);

            for (int i = 0; i < chaizi.Length ; i++)                           //遍历chaizi字符串数组变量
            {
                if(!dic.ContainsKey(chaizi[i][0]))                             //如果字典类中不包含chaizi字符串数组的第一个内容
                {
                    dic.Add(chaizi[i][0], chaizi[i].Substring(1));             //那么将第一个内容加入到字典里作为键,通过Substring截取除第一个内容之外的作为字典的值
                }
            }
            #region 文章
            string text = "海贼王:有个男人他拥有世界上一切财富、名望和权势,他就是「海盗王」高路德•罗杰。在临死前说过这样一句话:让全世界的人都奔向大海「想要我的财宝吗?想要的话全就拿去吧……!";
            #endregion
            
            for (int i = 0; i < text.Length ; i++)                             //遍历文章
            {
                if(dic.ContainsKey (text[i]))                                  //如果字典的键包含文章中的文本
                {
                    Console.Write(dic[text[i]]);                               //那么将字典中的值写入到控制台
                }
                else
                {
                    Console.Write(text[i]);                                    //否则将文章文本写入到控制台
                }
            }
            Console.ReadKey();
        }
    }

②、File的使用,各种方法

            Console.WriteLine(DateTime.Now);                     //获取当前日期,时间
            string path = @"C:\Users\Smile\Desktop\books.txt";   //定义文本路径及文本名称,path为路径,也为文件名称
            string newpath = @"D:\books.txt";
            File.Create(path);                                   //①增   这个方法是在指定路径下创建一个文件,如果文件存在在,则覆盖给文件。
            File.Delete(path);                                   //②删   这个方法是删除制定路径下的文件,直接删除,不放入回收站,如果该路径下没有该文件,不报异常
            bool result = File.Exists(path);                     //③判断是否存在,返回值为bool值
            DateTime dt = File.GetCreationTime(path);            //④获得文件创建时间
            DateTime dt = File.GetLastAccessTime(path);          //⑤获得文件访问时间
            DateTime dt = File.GetLastWriteTime(path);           //⑥获得最后修改时间
            File.Move(path, newpath);                            //⑦把文件移动到指定的路径下,名称可改可不改,已存在便无法移动
            File.Copy(path, newpath);                            //⑧把文件复制到制定的路径下,不可重复
            File.Copy(path, newpath, true);                      //⑧如果遇到重复文件名,则用copy的第二个重载方便,便可以对相同文件进行覆盖

            string[] str=File.ReadAllLines(path);                //⑨一行一行的读,返回的是字符串数组
                                                                 //Console.WriteLine(str);   //数组想要显示出来,需要遍历显示,而非写入
            for (int i = 0; i < str.Length; i++)
            {
                Console.WriteLine(str[i]);
            }

            string file = File.ReadAllText(path);                //⑨直接读取整篇文章,返回的是字符串
            Console.WriteLine(file);                             //字符串要显示出来,直接写入控制台即可
            Console.ReadKey();
            File.WriteAllLines(path, new string[] { "路飞", "索隆", "乌索普", "山治" });   //⑩写入   一行行写入
            File.WriteAllText(path, "海贼王");                     //⑩ 写入 整篇内容
            File.WriteAllText(path, "罗杰", Encoding.UTF8);        //⑩ 写入内容,覆盖原有文本。并设定另存为编码
                                                                  //但上面的方法覆盖了原内容,那如何不覆盖直接添加呢?
            File.AppendAllText(path, "  艾斯之父", Encoding.UTF8); //⑪ 写入内容保留原有文本

③、List<>的用法,求数字和,最大值,最小值,平均数

        static void Main(string[] args)
        {
            List<int> listint = new List<int>();    //实例化一个泛集合
            Random rand = new Random();             //实例化一个随机数
            while (listint.Count!=10)               //当泛集合的数量不等于10时循环,等于10时跳出
            {
                int num = rand.Next(0, 100);        //定义一个随机数num:0-99
                Console.WriteLine(num);             //在控制台写入这些随机数
                if (!listint.Contains(num))         //判断如果泛集合中不包含num
                {
                    listint.Add(num);               //则将num加入泛集合
                }
            }
                                                    //泛集合中如何求和,平均数,最大值,最小值?
            Console.WriteLine("数字和为:{0},平均数为{1},最大数为{2},最小数为{3}", listint.Sum(),listint.Average (),listint.Max(),listint.Min());
            Console.ReadKey();
                                                    //list方法:clear,insert,max,min,sum,sort,serverse等
                       
        }

④、火星文核心代码

        static void Main(string[] args)
        {
            //将字符串ChaiZi进行切割,切除空格以及切除后的空白项,并将其结果赋值给字符串数组chaizi
            string[] chaizi=ChaiZi.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            //chaizi[i]----卧臣卜
            //chaizi[i][0]-----卧
            //chaizi[i][1]-----臣
            //chaizi[i][2]-----卜
            Hashtable ht = new Hashtable();                       //实例化一个哈希表
            for (int i = 0; i < chaizi.Length ; i++)              //遍历字符串数组chaizi,即卧臣卜
            {
                                                                  //判断哈希表中的键是否相同
                                                                  //如果哈希表的键中未包含chaizi[i][0],即‘卧’,那么便将其key(卧)value(臣卜)加入到哈希表中
                if (!ht.ContainsKey(chaizi[i][0]))                //chaizi[i][0]获取字符串中指定位置的Char对象
                {
                    ht.Add(chaizi[i][0], chaizi[i].Substring(1)); //向哈希表中添加key,value的值
                }
            }
                                                                  //到此哈希表中有字和拆分好的字体
            #region 文章
            string text = "海贼王:有个男人他拥有世界上一切财富、名望和权势,他就是「海盗王」高路德•罗杰。在临死前说过这样一句话:让全世界的人都奔向大海「想要我的财宝吗?想要的话全就拿去吧……!";
            #endregion

            for (int i = 0; i < text.Length ; i++)                //遍历文章
            {
                if(ht.ContainsKey (text[i]))                      //判断哈希表中是否有该文章内容
                {
                    Console.Write(ht[text[i]]);                   //如果有则将哈希表中的值写入控制台
                }
                else
                {
                    Console.Write(text[i]);                       //如果没有则直接将text[i]写入控制台
                } 
            }
            Console.ReadKey();
        }

⑤、英汉翻译

        static void Main(string[] args)
        {
            Hashtable ht = new Hashtable();                             //实例化一个哈希表
            string path = @"C:\Users\Smile\Desktop\dic.txt";            //创建一个路径及路径所在文本
            string[] str = File.ReadAllLines(path, Encoding.Default);   //按行读取路径中的文本,编码为默认ANSI
            
            for (int i = 0; i < str.Length ; i++)                       //遍历读取出来的文本
            {
                                                                        //切除文本中的空格及空白项,并将切割出来的字符串数组赋值给字符串数组变量word
                string[] word=str[i].Split(new char[] { ' ' },StringSplitOptions.RemoveEmptyEntries);   
                string value = "";                                      //定义哈希表中的值value
                for (int a = 1; a < word.Length ; a++)                  //遍历切割出来的字符串数组
                {
                    value += word[a];                                   //哈希表中值为word数组中除第一个以外的所有内容相加
                }
                if (!ht.ContainsKey(word[0]))                           //如果哈希表中不包含key,字符串数组第一个内容
                {
                    ht.Add(word[0],value);                              //那么就将第一个内容加入哈希表中作为哈希表中代表key,把value加入哈希表中代表值
                }
                else                                                    //把相同单词的中文意思加在一起
                {
                    ht[word[0]] += value;                               
                }
            }
            Console.WriteLine("请输入单词");                            //在控制台写入一行内容
            string userword = Console.ReadLine();                       //读取用户在控制台上输入的内容,并将其赋值给变量userword
            if(ht.ContainsKey(userword))                                //如果哈希表中的key包含用户输入的内容
            {
                Console.WriteLine(ht[userword]);                        //则将哈希表中key所对应的值写入控制台
            }
            else
            {
                Console.WriteLine("没有该单词,请重新输入");             //在控制台写入提示内容
            }
            Console.ReadKey();
        }

以上便是第三部分第四讲的内容梳理,下一站走起^_^

猜你喜欢

转载自blog.csdn.net/Elsa15/article/details/86890986