c#面向对象6--File类(下)/List泛型集合/装箱和拆箱

2021-04-25  本文已影响0人  Mona_Song

Encoding类的几种方法(File用到)

出现乱码了,尝试顺序 Default-utf8-Encoding.GetEncoding("GB2312")-Encoding.GetEncoding("GBK")
出现乱码的原因:保存和打开的编码方式不一致

GB2312:只有简体
GBK:简体繁体都包含

File类

编程时最好使用相对路径,具有更好的可移植性

List泛型集合

装箱和拆箱

为什么不用ArrayList和Hashtable了?
装箱:把值类型转化成引用类型
拆箱:把引用类型转化成值类型


1为装箱执行的时间,2为未装箱执行的时间

因此代码中应该尽量避免装箱和拆箱


此过程竟然未拆箱

键值对集合Dictionary对应Hashtable

习题

namespace 泛型练习
{
    class Program
    {
        static void Main(string[] args)
        {
            //将一个数组中的奇数放到一个集合中,偶数放到另一个集合中
            //最终将两个集合合并为一个集合,且奇数显示在左边,偶数显示在右边
            int[] s = {1,2,3,4,5,6,7,8,9,10,99,100,110,112,114};
            List<int> listji = new List<int>();
            List<int> listou = new List<int>();
            for (int i = 0; i < s.Length; i++)
            {
                if (s[i] % 2 == 0)
                {
                    listou.Add(s[i]);
                }
                else
                {
                    listji.Add(s[i]);
                }
            }
            listji.AddRange(listou);
            foreach (var item in listji)
            {
                Console.Write(item+"  ");
            }
            Console.ReadKey();
        }
    }
}

自己写的代码的效果

            //将一个数组中的奇数放到一个集合中,偶数放到另一个集合中
            //最终将两个集合合并为一个集合,且奇数显示在左边,偶数显示在右边
            int[] s = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 99, 100, 110, 112, 114 };
            Hashtable OddHt = new Hashtable();
            Hashtable EvenHt = new Hashtable();

            for (int i = 0; i < s.Length; i++)
            {
                if (s[i] % 2 == 0)
                {
                    EvenHt.Add(i, s[i]);
                }
                else
                {
                    OddHt.Add(i, s[i]);
                }
            }
            foreach (var item in OddHt)
            {
                Console.WriteLine("{0}-----{1}", item, OddHt[item]);
            }
            foreach (var item in EvenHt)
            {
                Console.WriteLine("{0}-----{1}", item, EvenHt[item]);
            }
            Console.ReadKey();
上图代码运行结果 更正后可以显示出正确结果
正确运行结果
            #region 练习二
            //提示用户输入一个字符串,通过foreach循环将用户输入的字符串赋值给一个字符数组
            Console.WriteLine("请输入一个字符串");
            string input = Console.ReadLine();
            char[] chs = new char[input.Length];
            int i = 0;
            foreach (char item in input)
            {
                chs[i] = item;
                Console.WriteLine(chs[i]);
                i++;//(更正)不写也能正确输出,但是只有下标为0的数组位置存了最后一个字符
            }
            #endregion
            #region 练习三
            //统计welcome to china中每个字符出现的次数 不考虑大小写
            //思路:字母是键,对应的出现次数是值
            Dictionary<char, int> dic = new Dictionary<char, int>();
            string s = "wElcome to China";
            //不考虑大小写
            s = s.ToLower();
            for (int i = 0; i < s.Length; i++)
            {
                //消除空格
                if(s[i] == ' ')
                {
                    continue;
                }
                if (dic.ContainsKey(s[i]))
                {
                    dic[s[i]]++;
                }
                else
                {
                    dic[s[i]] = 1;
                }
            }
            foreach (KeyValuePair<char,int> kv in dic)
            {
                Console.WriteLine("{0}----{1}", kv.Key, kv.Value);
            }
            Console.ReadKey();
            #endregion
上一篇下一篇

猜你喜欢

热点阅读