• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#数组和集合整理

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

  • 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

 

 
 

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

  • 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

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
【转载来的】C# 2.0中P/Invoke支持的几处增强发布时间:2022-07-10
下一篇:
实现C#即时编译器发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap