zoukankan      html  css  js  c++  java
  • C#学习笔记(十九):字典

    自定义泛型

    泛型类,第一替代符T,第二替代符U

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    namespace m1w4d5_dictionary
    {
        class Program
        {
            static void Main(string[] args)
            {
                //把数字转换成中文字符
                string inputStr = Console.ReadLine();
                //123456789
                //一二三四五
                //字典<key,value>
                //声明变量
                Dictionary<char, string> dic = new Dictionary<char, string>();
                dic.Add('1', "");
                dic['2'] = "";
                dic['3'] = "";
                //修改一个元素
                //dic.Add('1',"壹");位置已占,会报错
                dic['2'] = "";
                //访问元素
                //Console.WriteLine(dic['2']);
                //遍历
                foreach (var item in dic)
                {
                    //Console.WriteLine(item);
                    if (item.Key == '1')
                    {
                        Console.WriteLine(item.Value);
                    }
                }
                Console.WriteLine();
                Dictionary<char, char> dic1 = new Dictionary<char, char>();
                string num = "1234567890";
                string str = "一二三四五六七八九零";
                for (int i = 0; i < num.Length; i++)
                {
                    dic1[num[i]] = str[i];
                }
                for (int i = 0; i < inputStr.Length; i++)
                {
                    //如果用户输入的key不在我们的范围内,会报错
                    //通过ContainsKey判定字典中是否包含了对应的key
                    if (dic1.ContainsKey(inputStr[i]))
                    {
                        Console.Write(dic1[inputStr[i]]);
                    }             
                }
                Console.WriteLine();
                //计算字符串中每个字母出现的次数"Welcome to China! Welcome to HangKang!"
                //我能通过字母(char)找到他出现的次数(int)
                Dictionary<char, int> dic2 = new Dictionary<char, int>();
                string str1 = "Welcome to China! Welcome to HangKang!";
                for (int i = 0; i < str1.Length; i++)
                {
                    //如果你在字典有了,字典中有了这个字母
                    if (dic2.ContainsKey(str1[i]))
                    {
                        //你的值就自增
                        dic2[str1[i]]++;
                    }
                    else
                    {
                        //你的值就是
                        dic2[str1[i]] = 1;
                    }
                   
                }
                foreach (var item in dic2)
                {
                    Console.WriteLine(item.Key +":"+item.Value);
                }
            }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    namespace 泛型
    {
        //定义
        //泛型是C#的一种特性,可以让我们将一种结构(类,接口)或者一种逻辑(函数)应用到所有类型
        //如果我们要把一个类型或者方法写成泛型的,我们只需要在名称后面加上<>,<>中可以填入若干个类型替代符
        class MyList<T>
        {
            T[] data;
            public T this[int index]
            {
                get
                {
                    if (index < 0 || index >= count)
                    {
                        throw new OutOfMemoryException();
                    }
                    return data[index];
                }
                set
                {
                    if (index < 0 || index >= count)
                    {
                        throw new OutOfMemoryException();
                    }
                    else
                    {
                        data[index] = value;
                    }
                }
            }
            public int Capacity
            {
                get { return data.Length; }
                set
                {
                    if (value == count) return;
                    if (value < count) value = count;
                    //建立新数组
                    T[] newData = new T[value];
                    //拷贝数据
                    for (int i = 0; i < data.Length; i++) newData[i] = data[i];
                    //用新数组换老数组
                    data = newData;
                }
            }
            int count = 0;
            public int Count => count;
            //添加
            public MyList(int capacity = 4)
            {
                data = new T[capacity];
            }
            //动态增长    
            public void Add(T item)
            {
                if (count >= Capacity) Capacity *= 2;
                data[count] = item;
                count++;
            }
            //删除
            public void Remove(T item)
            {
                int index = IndexOf(item);
                if (index != -1)
                {
                    RemoveAt(index);
                }
            }
            public void RemoveLast(T item)
            {
                int index = LastIndexOf(item);
                if (index != -1)
                {
                    RemoveAt(index);
                }
            }
            public void RemoveAt(int index)
            {
                if (index >= count)
                {
                    throw new IndexOutOfRangeException();
                }
                for (int i = index + 1; i < count; i++)
                {
                    data[i - 1] = data[i];
                }
                count--;
            }
            public void RemoveAll(T item)
            {
                while (true)
                {
                    int index = IndexOf(item);
                    if (index != -1)
                    {
                        RemoveAt(index);
                    }
                    else
                    {
                        break;
                    }
                }
            }
            //查找
            public int IndexOf(T item)
            {
                int index = -1;
                for (int i = 0; i < count; i++)
                {
                    if (item.Equals(data[i]))
                    {
                        return i;
                    }
                }
                return index;
            }
            public int LastIndexOf(T item)
            {
                int index = -1;
                for (int i = count - 1; i >= 0; i--)
                {
                    if (item.Equals(data[i]))
                    {
                        return i;
                    }
                }
                return index;
            }
            public void Sort(Comparison<T> comparison)
            {
                for (int i = 0; i < count - 1; i++)
                {
                    for (int j = 0; j < count - 1 - i; j++)
                    {
                        if (comparison(data[j], data[j + 1]) > 0)
                        {
                            T temp = data[j];
                            data[j] = data[j + 1];
                            data[j + 1] = temp;
                        }
                    }
                }
            }
            public void Sort(IComparer<T> iCompareer)
            {
                for (int i = 0; i < count - 1; i++)
                {
                    for (int j = 0; j < count - 1 - i; j++)
                    {
                        if (iCompareer.Compare(data[j], data[j + 1]) > 0)
                        {
                            T temp = data[j];
                            data[j] = data[j + 1];
                            data[j + 1] = temp;
                        }
                    }
                }
            }
            public void Sort()
            {
                for (int i = 0; i < count - 1; i++)
                {
                    for (int j = 0; j < count - 1 - i; j++)
                    {
                        IComparable<T> Icompar = data[j] as IComparable<T>;
                        if (Icompar.CompareTo(data[j + 1]) > 0)
                        {
                            T temp = data[j];
                            data[j] = data[j + 1];
                            data[j + 1] = temp;
                        }
                    }
                }
            }
        }
        class Monster : IComparable<Monster>
        {
            public Monster(string name, int attack, int defend, int health)
            {
                this.name = name;
                this.attack = attack;
                this.defend = defend;
                this.health = health;
            }
            public string name;
            public int attack;
            public int defend;
            public int health;
            public override string ToString()
            {
                return string.Format("{0}:[attack:{1},defend:{2},health{3}]", name, attack, defend, health);
            }
            public int CompareTo(Monster other)
            {
                //比较某一个参数,返回对应值
                //如果大就返回大于0的数 自已排在对比参数的后面
                //如果小就返回小于0的数 自已排在对比参数的前面
                //如果相等就返回0 不换
                //这样在外部调用Sort的时候会 形成一个以这个参数为标准的升序排序
                return attack - other.attack;
            }
            public static int AttackSort(Monster a, Monster b)
            {
                return a.attack - b.attack;
            }
            public static int DefendSort(Monster a, Monster b)
            {
                return a.defend - b.defend;
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                //List<int> list = new List<int>();
                //list.Add(5);
                //list.Add(6);
                //list.Add(7);
                //list.Capacity = 0;
                //Console.WriteLine(list.Capacity);
                MyList<Monster> myList = new MyList<Monster>();
                Random roll = new Random();
                //Console.WriteLine(myList.Capacity);
                for (int i = 0; i < 10; i++)
                {
                    myList.Add(new Monster(i.ToString(), roll.Next(5, 10), roll.Next(10, 15), roll.Next(100, 150)));
                }
                //myList[5] = 1;
                //myList[7] = 1;
                myList.Sort();
                for (int i = 0; i < myList.Count; i++)
                {
                    Console.WriteLine(myList[i]);
                }
            }
        }
    }
  • 相关阅读:
    BZOJ3129/洛谷P3301方程(SDOI2013)容斥原理+扩展Lucas定理
    Dilworth定理
    字符串
    hash
    李超线段树(segment[HEOI2013]-洛谷T4097)
    连通数[JSOI2010]-洛谷T4306
    主席树
    splay
    树链剖分
    受欢迎的奶牛-洛谷2341
  • 原文地址:https://www.cnblogs.com/vuciao/p/10362559.html
Copyright © 2011-2022 走看看