實驗---泛型

iamzxf發表於2015-06-02

實驗目的:

1、 掌握泛型方法的定義和使用

2、 掌握常用泛型集合的使用

實驗內容:

 1、設計一個控制檯應用程式,定義一個泛型方法用來識別輸入的資料:

要求:

(1)如果輸入的是整數,顯示提示“資料x是整數。”

(2)如果輸入的是字串,顯示提示資訊。

(3)如果輸入的是雙精度浮點數,顯示提示資訊。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
    class GenClass<T>
    {
        T inputData;
        public GenClass(T t)
        {
            inputData = t;
        }

        public void output()
        {
            Console.WriteLine(inputData.GetType());  
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            GenClass<int> class1 = new GenClass<int>(123);
            class1.output();

            GenClass<string> class2 = new GenClass<string>("123");
            class2.output();

            GenClass<double> class3 = new GenClass<double>(123);
            class3.output();

            Console.ReadLine();
        }
    }
}

2、設計一個控制檯應用程式,使用字典集合實現下列要求:

(1)從控制檯輸入一個字串,統計每個字元出現的個數。

(2)並在控制檯輸出出現的每個字元及該字元的個數。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;


namespace DictionarySetDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Dictionary<char,int> dic = new Dictionary<char, int>();
            for (char ch = 'a'; ch <= 'z'; ch++)
                dic.Add(ch, 0);

            string str = Console.ReadLine();
            for (int i = 0; i < str.Length; i++)
            {
                if (str[i] >= 'a' && str[i] <= 'z')
                    dic[str[i]]++;
            }

            foreach(KeyValuePair<char,int> d in dic)
            {
                Console.WriteLine("{0},{1}",d.Key,d.Value);
            }

            Console.ReadLine();
        }
    }
}


3、使用泛型List<T>操作整數列表。建立一個空的List<int>,並使用Add方法新增0~8中的偶數。將元素5插入到List<int>中的指定索引2處。遍歷並輸出List<int>中的所有元素。使用泛型List<T>建立並顯示字串陣列列表arrayList2:”One”,”Two”,”Three”。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace listGeneral
{
       class Program
    {
        static void Main(string[] args)
        {
            List<int> myList = new List<int>();
            for (int i = 1; i <= 8; i++)
            {
                if (i % 2 == 0)
                    myList.Add(i);

            }
            myList.Insert(2, 5);

            for (int i = 0; i < myList.Count; i++)
                Console.Write(myList[i] + "\t");
            Console.WriteLine();

            
            string[] strList = new string[] { "One", "Two", "Three" };
            List<string> stringList = new List<string>(strList);

            for (int i = 0; i < stringList.Count; i++)
                Console.WriteLine(stringList[i]);


                Console.ReadLine();

        }
    }
}

思考:自定義一個泛型集合類MySet。該集合可以實現以下功能

(1)新增元素Add(e),新增的元素必須是不重複的

(2)刪除元素Remove(e)

(3)測試某個元素是否存在Contains(e)

(4)求該集合和另一個集合的並集,UnionWith(set2)返回該集合和set2集合的並集。

(5)求該集合和另一個集合的交集,IntersectWith(set2)返回該集合和set2集合的交集

(6)無引數的建構函式

(7) 實現IEnumerable<T>,則可以使用foreach遍歷器

可以藉助於List<T>來實現

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace generalClassExp
{
    class MySet<T>
    {
        List<T> myList;
        public MySet()
        {
            myList = new List<T>();    
        }
        public MySet(T[] arr)
        {
            myList = new List<T>(arr);
        }

        public MySet(List<T> list)
        {
            this.myList = list;
        }

        public T this[int index]
        {
            get { return myList[index]; }
        }
        public int Count { get { return myList.Count; } }

        public void add(T newObj)
        { 
            if(myList.Contains(newObj))
                Console.WriteLine("已存在");
            else
                myList.Add(newObj);
        }

        public bool Contains(T newObj)
        {
            return myList.Contains(newObj);
        }

        public void remove(T newObj)
        {
            myList.Remove(newObj);
        }
             

        public MySet<T> Union(MySet<T> anotherList)
        {
            MySet<T> newList = new MySet<T>();
            for (int i = 0; i < myList.Count; i++)
                newList.add(myList[i]);

                for (int i = 0; i < anotherList.Count; i++)
                {
                    T sing = anotherList[i];
                    if (!newList.Contains(sing))
                        newList.add(sing);
                }


            return newList;
        }

        public MySet<T> Intersection(MySet<T> anotherList)
        {
            MySet<T> newList = new MySet<T>();            

            for (int i = 0; i < anotherList.Count; i++)
            {
                T singg = anotherList[i];
                if (myList.Contains(singg))
                    newList.add(singg);
            }

            return newList;  
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            int[] a = { 1, 2, 3, 4, 5 };
            int[] b = { 4, 5, 6, 7, 8 };

            MySet<int> aList = new MySet<int>(a);
            MySet<int> bList = new MySet<int>(b);

            aList.add(6);
            MySet<int> cList = aList.Union(bList);
            MySet<int> dList = aList.Intersection(bList);

            for (int i = 0; i < cList.Count; i++)
                Console.Write(cList[i]+"\t");

            Console.WriteLine();

            for (int i = 0; i < dList.Count; i++)
                Console.Write(dList[i]+"\t");

            Console.ReadLine();
            

        }
    }
}


相關文章