zoukankan      html  css  js  c++  java
  • C#数组和集合整理

    写起来还是有些勉强的,还有很多用法没有完全理解,只整理了一些基本点。

    • Array
    • ArrayList
    • List
    • Hashtable
    • Dictionary
    • Stack
    • Queue

    Array

    也就是数组。

    具体表示方法是:数据类型[维数] 数组名=new 数据类型[]

    举例如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                int[] a = new int[3];
                int[] b = new int[3] { 1, 2, 3 };
                int[] c = new int[] { 1, 2, 3 };
                int[,] d = new int[3,3];
            }
        }
    }

    ArrayList

    动态数组,用法似乎跟c++的vector有点像。使用ArrayList必须引用Collections类。

    声明 ArrayList a=new ArrayList();

    添加

    • Add(a) 添加元素a到末尾;
    • Insert(b,a) 在位置b插入元素a;
    • InsertRange(b,a) 在位置b插入集合a;

    删除

    • Remove(a) 移除元素a;
    • RemoveAt(a) 移除位置a的元素;
    • RemoveRange(a,b) 移除位置a到位置b的元素;
    • Clear() 清空;

    排序 Sort();

    反转 Reverse();

    查找

    • IndexOf(a) 返回元素a的位置,没有则返回-1;
    • Contains(a) 检测是否含有元素a,返回true/false;

    输出元素

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Collections;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                ArrayList a = new ArrayList();
                foreach (int i in a) Console.WriteLine(i); //不需要强制转换
                for (int i = 0; i < a.Count; i++) //与数组的Length不同
                {
                    int n = (int)al2[i]; //需要强制转换
                    Console.WriteLine(n);
                }
            }
        }
    }

    List

    List类是ArrayList类的泛型等效类,它的大部分用法都与ArrayList相似。最大的区别就是在声明List集合时,我们需要同时声明List内元素的数据类型。

    不过,大部分情况下,List似乎比ArrayList更加安全和高效,原因在于ArrayList会把所有插入其中的数据作为object类型来处理,所以在用ArrayList处理数据时,很可能会出现类型不匹配的错误,并且装箱和拆箱的过程会带来很大的性能耗损。关于这一点还不是很理解,会继续学习。

    声明方式:

    List<int> a = new List<int>();

    Hashtable

    传说中的哈希表。

    哈希表的内部是无序散列,也就是说,其输出不是按照开始加入的顺序,但这也保证了高效率。如果以任意类型键值访问其中元素会快于其他集合,特别是当数据量特别大的时候,效率差别尤其大。如果一定要排序HashTable输出,只能自己实现。

    声明:Hashtable a = new Hashtable();

    Add(a,b) 在哈希表中添加键值对;
    Clear() 清除哈希表中的键值对;
    Contains(a) 判断哈希表中是否含有键a;
    Remove(a) 删除哈希表中的键值对a;
    ToString(); 返回当前Object的string;

    示例

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Collections;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                Hashtable a = new Hashtable();
    
                a.Add(1, 1); //添加键值对
                a[1] = 2; //给指定键赋值
                //遍历1
                foreach (DictionaryEntry b in a)
                {
                    Console.WriteLine("{0}{1}", b.Key, b.Value);
                }
                //遍历2
                IDictionaryEnumerator c = a.GetEnumerator();
                while (c.MoveNext())
                {
                    Console.WriteLine("{0}{1}", c.Entry.Key, c.Entry.Value);
                }
                //按序输出
                ArrayList d = new ArrayList(a.Keys);
                d.Sort();
                foreach (int e in d)
                {
                    Console.WriteLine(a[e]);
                }
            }
        }
    }

    Dictionary

    Dictionary与Hashtable类似,但是Dictionary遍历的顺序就是加入的顺序。

    声明:Dictionary<string, string> a = Dictionary<string, string>();

    Add(a,b) 在字典中添加键值对;
    Clear() 清除字典中的键值对;
    Contains<a,b> 判断字典中是否含有键值对;
    ContainsKey(a) 判断字典中是否含有键a;
    ContainsValue(a) 判断字典中是否含有值a;
    Remove(a) 删除哈希表中的键值对a;

    示例:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Collections;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                Dictionary<string, string> a = new Dictionary<string, string>();
                a.Add("a", "aa"); //添加键值对
                a.Add("b", "bb");
                a["a"] = "cc"; //给指定键赋值
                //用泛型结构体遍历
                foreach (KeyValuePair<string, string> b in a)
                {
    
                    Console.WriteLine("{0}{1}", b.Key, b.Value);
                }
                //获得值集合
                foreach (string c in a.Values)
                {
                    Console.WriteLine(c);
                }
            }
        }
    }

    Stack

    后进先出。

    声明:Stack a = new Stack();

    Pop() 出栈;
    Push(a) 进栈;
    Count 获得栈包含的元素数;
    Peek() 获得栈顶元素;
    Contain(a) 判断栈中是否含有元素a;
    Clear() 清除栈;
    ToArray() 将栈复制到数组;

    示例:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Collections;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                Stack a = new Stack();
                a.Push(1); //入栈
                a.Push(2);
                a.Pop(); //出栈
                Console.WriteLine("{0}{1}",a.Count,a.Peek()); //输出栈的元素个数
                //遍历
                foreach (int b in a)
                {
                    Console.WriteLine(b);
                }
            }
        }
    }

    Queue

    先进先出。

    声明:Queue a = new Queue();

    Enqueue(a) 入队;
    Dequeue() 出队;
    Count 获得队列包含的元素数;
    Peek() 获得队列最前端元素;
    Contain(a) 判断队列中是否含有元素a;
    Clear() 清除队列;
    ToArray() 将队列复制到数组;

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Collections;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                Queue a = new Queue();
                a.Enqueue(1); //入队
                a.Enqueue(2);
                a.Dequeue(); //出队
                Console.WriteLine("{0}{1}", a.Count, a.Peek()); //输出队列的元素个数
                //遍历
                foreach (int b in a)
                {
                    Console.WriteLine(b);
                }
            }
        }
    }

    转自:https://www.cnblogs.com/S031602240/p/6411439.html

     
     
  • 相关阅读:
    【C#】SuperSocket配置启动UDP服务器
    【UWB】DWM1000 室内定位串口协议说明
    【Unity3D】把相机视角放置到编辑器当前位置视角
    【DXP】如何在原理图中批量修改
    request中的gizp提交解析以及提交请求
    java基础知识----循环
    pymongo.errors.CursorNotFound: Cursor not found
    xposed入门(二)---hook方法入参
    VulnHub靶场篇9-SkyTower: 1
    VulnHub靶场篇8-IMF:1
  • 原文地址:https://www.cnblogs.com/sky6699/p/12868690.html
Copyright © 2011-2022 走看看