C#集合。

集合命名空間:數組

  using system.collections. 非泛型集合dom

  using system.collections.Generic.  泛型集合函數

爲何要用集合:spa

  一、數組一旦聲明長度就固定了。code

  二、集合有不少方法能夠用對象

  等blog

經常使用集合:排序

相似數組集合:ArrayList  List<>接口

鍵值對集合:Hashtable  Dictionary<K V>隊列

棧集合:Stack

隊列:Queye

ArrayList:

 class Program
    {      
        static void Main(string[] args)
        {
            ArrayList arrayList = new ArrayList();
            arrayList.Add(1); //增長一個元素
            arrayList.AddRange(new int[] { 2, 3 });//增長一個集合
            arrayList.Insert(0, "開始:");//在指定位子插入一個元素
            arrayList.InsertRange(4, new string[] { "", "", "" });//指定位置插入集合
            arrayList.RemoveAt(7);
            arrayList.Clear();//清空集合
            for (int i = 0; i < arrayList.Count; i++)
            {
                Console.WriteLine(arrayList[i]);
            }
        }    
    }

Remove()不是根據對象來判斷的,而是根據值來判斷。

Contains()是否包含某個值,也是根據值來判斷的。

集合轉爲數組:.ToArray().

排序:  一、.sort() 升序  沒有降序   能夠用.Reverse()顛倒位置實現。

    二、想讓任何集合實現排序須要實現 IComparable接口 。

    三、直接調用sort是使用ICompareble 接口的默認方式來排序。能夠用sort的重載,使用本身的比較器。

Hashtable:

簡單添加和獲取:

class Program
    {      
        static void Main(string[] args)
        {
            Hashtable hashtable = new Hashtable();
            hashtable.Add("Sam", "Sam");
            hashtable.Add("Penny", new Person() { Name = "Penny" });
            Console.WriteLine(hashtable["Sam"]);
            Person Penny = hashtable["Penny"] as Person;
            Console.WriteLine(Penny.Name);

        }    
    }

鍵值對集合的鍵不能重複。

判斷是否存在某個鍵:.ContentsKey()    是否存在某個值:.ContentsValue()

遍歷Hash table:

class Program
    {      
        static void Main(string[] args)
        {
            Hashtable hashtable = new Hashtable();
            hashtable.Add("Sam", "Sam");
            hashtable.Add("Penny", "Penny");
            //遍歷鍵
            foreach (object item in hashtable.Keys)
            {
                Console.WriteLine("Key:{0}----Value:{1}",item,hashtable[item]);
            }
            //遍歷值
            foreach (object item in hashtable.Values)
            {
                Console.WriteLine("Value:{0}",item);
            }
            //遍歷鍵值對
            foreach (DictionaryEntry item in hashtable)
            {
                Console.WriteLine("Key:{0}---Value{1}",item.Key,item.Value);
            }

        }    
    }

集合小練習:

兩個ArrryList集合的並集。

class Program
    {      
        static void Main(string[] args)
        {
            ArrayList A = new ArrayList(new string[] {"a","b"});
            ArrayList B = new ArrayList(new string[] { "a", "b","c","d" });
            for (int i = 0; i <B.Count; i++)
            {
                if (!A.Contains(B[i]))
                {
                    A.Add(B[i]);
                }
            }
            for (int i = 0; i < A.Count; i++)
            {
                Console.WriteLine(A[i]);
            }
        }    
    }

隨機生成十個1-100之間的數放到arraylist中,這些數必須是偶數且不能重複。

class Program
    {      
        static void Main(string[] args)
        {
            ArrayList arrayList = new ArrayList();
            Random random = new Random();
            while (arrayList.Count<10)
            {
                int r = random.Next(1, 101);
                if (!arrayList.Contains(r)&&((r%2)==0))
                {
                    arrayList.Add(r);
                }
            }
            for (int i = 0; i < arrayList.Count; i++)
            {
                Console.WriteLine(arrayList[i]);
            }
        }    
    }

上面程序把random放循環外面效率更好,由於無參的random構造函數以系統時間爲種子,而一遍循環完了之後時間還沒來得及變,就會生成相同的數。

泛型集合: 

List<string> list = new List<string> () 

和 arraylist相比:

  數據類型固定,有更多的方法能夠用。

Dictionary<string, int> dic = new Dictionary<string, int> ;

和hashtable相比:

  鍵和值都有類型約束。

遍歷鍵值對:

 class Program
    {      
        static void Main(string[] args)
        {
            Dictionary<string, int> dic = new Dictionary<string, int>();
            dic.Add("Sam", 22);
            dic.Add("Penny", 23);
            foreach (KeyValuePair<string,int> item in dic)
            {
                Console.WriteLine("keys:{0}--value:{1}",item.Key,item.Value);
            }
        }    
    }

判斷字符串中每一個字母出現的次數:

class Program
    {      
        static void Main(string[] args)
        {
            string str = "wellcome to china";
            Dictionary<char, int> dict = new Dictionary<char, int>();
            for (int i = 0; i < str.Length; i++)
            {
                if (char.IsLetter(str[i]))
                {
                    if (dict.ContainsKey(str[i]))
                    {
                        dict[str[i]]++;
                    }
                    else
                    {
                        dict.Add(str[i], 1);
                    }
                }
            }
            foreach (KeyValuePair<char,int> item in dict)
            {
                Console.WriteLine("{0}----{1}",item.Key,item.Value);
            }
        }    
    }
相關文章
相關標籤/搜索