首页 > 编程语言 >ArrayList in C#

ArrayList in C#

时间:2024-05-10 16:13:29浏览次数:19  
标签:Console C# ArrayList 元素 Add item arrayList1

https://dotnettutorials.net/lesson/arraylist-collection-csharp/

c#中的数组列表是什么?
c#中的ArrayList是一个非泛型集合类,它的工作方式类似于数组,但提供了动态调整大小、从集合中间添加和删除元素等功能。c#中的ArrayList可以用来添加未知数据,也就是说,当我们不知道数据的类型和数据的大小时,我们可以使用ArrayList。

它用于创建动态数组,意味着数组的大小会根据程序的需要自动增加或减少。不需要指定数组列表的大小。在ArrayList中,可以存储相同类型的元素,也可以存储不同类型的元素。

c#中ArrayList类的属性
元素可以在任何时间点从Array List集合中添加和删除。

ArrayList不能保证被排序。
ArrayList的容量是指该数组列表可以容纳的元素数量。
可以使用整数索引访问此集合中的元素。此集合中的索引是从零开始的。
它允许重复元素。

 

如何在c#中创建数组列表?
c#中的ArrayList提供了以下三个构造函数,我们可以使用它们来创建ArrayList类的实例。

ArrayList():该方法用于初始化ArrayList类的一个新实例,该实例为空,初始容量为默认值。
ArrayList(ICollection c):该方法用于初始化ArrayList类的新实例,该实例包含从指定集合复制的元素,且初始容量与复制的元素数量相同。参数c指定将其元素复制到新列表的Collection。
ArrayList(int capacity):初始化ArrayList类的一个新实例,该实例为空,具有指定的初始容量。参数capacity指定新列表最初可以存储的元素数量。
首先,我们需要导入系统。然后可以使用第一个构造函数创建ArrayList的实例,如下所示。您可以使用以下任何一种语法:

 

如何在c#中添加元素到数组列表?
ArrayList非泛型类提供了Add()方法,我们可以使用该方法向数组列表中添加元素,甚至可以使用对象初始化语法向ArrayList中添加元素。最重要的一点是,我们可以在ArrayList中添加多个不同类型的元素,尽管也可以添加重复的元素。

让我们看一个例子来理解在c#中向ArrayList类型的集合中添加元素的两种方法。请看下面的例子。在这里,您可以看到,我们添加了不同类型的数据以及重复的数据,并且可以接受。

using System;
using System.Collections;
namespace Csharp8Features
{
    public class ArrayListDemo
    {
        public static void Main()
        {
            //Adding elements to ArrayList using Add() method
            ArrayList arrayList1 = new ArrayList();
            arrayList1.Add(101); //Adding Integer Value
            arrayList1.Add("James"); //Adding String Value
            arrayList1.Add("James"); //Adding Duplicate Value
            arrayList1.Add(" "); //Adding Empty
            arrayList1.Add(true); //Adding Boolean
            arrayList1.Add(4.5); //Adding double
            arrayList1.Add(null); //Adding null

            foreach (var item in arrayList1)
            {
                Console.WriteLine(item);
            }

            //Adding Elements to ArrayList using object initializer syntax
            var arrayList2 = new ArrayList()
            {
                102, "Smith", "Smith", true, 15.6
            };

            foreach (var item in arrayList2)
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }
    }
}

如何在c#中访问数组列表?
如果您查看ArrayList的定义,那么您将看到ArrayList类实现了如下图所示的IList接口。因为它实现了IList接口,所以我们可以使用索引器访问元素,就像访问数组一样。索引从0开始,每个后续元素加1。因此,当一个集合类实现了IList接口时,我们就可以通过使用整数索引访问该集合的元素。

 当将元素添加到ArrayList中时,它会自动将元素强制转换为对象类型,然后将它们存储在集合中。因此,在访问元素时需要显式转换为适当的类型,否则可以使用var变量。为了更好地理解,请看下面的例子。代码是自解释的,请通过注释。

using System;
using System.Collections;
namespace Csharp8Features
{
    public class ArrayListDemo
    {
        public static void Main()
        {
            //Adding elements to ArrayList using Add() method
            ArrayList arrayList1 = new ArrayList();
            arrayList1.Add(101); //Adding Integer Value
            arrayList1.Add("James"); //Adding String Value
            arrayList1.Add(true); //Adding Boolean
            arrayList1.Add(4.5); //Adding double

            //Accessing individual elements from ArrayList using Indexer
            int firstElement = (int)arrayList1[0]; //returns 101
            string secondElement = (string)arrayList1[1]; //returns "James"
            //int secondElement = (int) arrayList1[1]; //Error: cannot cover string to int
            Console.WriteLine($"First Element: {firstElement}, Second Element: {secondElement}");

            //Using var keyword without explicit casting
            var firsItem = arrayList1[0]; //returns 101
            var secondItem = arrayList1[1]; //returns "James"
            //var fifthElement = arrayList1[5]; //Error: Index out of range
            Console.WriteLine($"First Item: {firsItem}, Second Item: {secondItem}");

            //update elements
            arrayList1[0] = "Smith";
            arrayList1[1] = 1010;
            //arrayList1[5] = 500; //Error: Index out of range

            foreach (var item in arrayList1)
            {
                Console.Write($"{item} ");
            }
            Console.ReadKey();
        }
    }
} 

如何在c#中迭代数组列表?
如果您查看ArrayList的定义,那么您还会看到ArrayList非泛型集合类实现了如下图所示的ICollection接口。我们知道ICollection接口支持集合类型的迭代。因此,我们可以使用foreach循环和for循环来迭代ArrayList类型的集合。

 数组列表的Count属性返回数组列表中存在的元素总数。让我们用一个例子来理解这一点。

using System;
using System.Collections;
namespace Csharp8Features
{
    public class ArrayListDemo
    {
        public static void Main()
        {
            //Adding elements to ArrayList using Add() method
            ArrayList arrayList1 = new ArrayList();
            arrayList1.Add(101); //Adding Integer Value
            arrayList1.Add("James"); //Adding String Value
            arrayList1.Add(true); //Adding Boolean
            arrayList1.Add(4.5); //Adding double

            //Iterating through foreach loop
            Console.WriteLine("Using ForEach Loop");
            foreach (var item in arrayList1)
            {
                Console.Write($"{item} ");
            }

            //Iterating through for loop
            Console.WriteLine("\n\nUsing For Loop");
            for (int i = 0; i < arrayList1.Count; i++)
            {
                Console.Write($"{arrayList1[i]} ");
            } 
            Console.ReadKey();
        }
    }
}

如何在c#中插入一个元素到数组列表集合的指定位置?
Add方法将在集合的末尾添加元素,即在最后一个元素之后。但是,如果你想在指定的位置添加元素,那么你需要使用ArrayList类的Insert()方法,它将在指定的索引位置插入元素到集合中。下面给出了使用Insert方法的语法。
插入索引,对象?值);
这里,参数index指定应该插入值的索引位置,参数值指定要插入到列表中的对象。它基于一个零索引。为了更好地理解,请看下面的例子。

using System;
using System.Collections;
namespace Csharp8Features
{
    public class ArrayListDemo
    {
        public static void Main()
        {
            ArrayList arrayList = new ArrayList()
            {
                    101,
                    "James",
                    true,
                    10.20
            };
            
            //Insert "First Element" at First Position i.e. Index 0
            arrayList.Insert(0, "First Element");

            //Insert "Third Element" at Third Position i.e. Index 2
            arrayList.Insert(2, "Third Element");

            //Iterating through foreach loop
            foreach (var item in arrayList)
            {
                Console.WriteLine($"{item}");
            }
            Console.ReadKey();
        }
    }
}

 

如果有一个集合,并且希望将该集合插入Array List的另一个集合,那么可以使用InsertRange()方法。InsertRange()方法的作用是:将集合中的元素插入到指定索引处的ArrayList中。语法如下所示。

void InsertRange(int index, ICollection c)

这里,参数index指定新元素应该插入的位置,参数c指定将其元素插入ArrayList的Collection。集合本身不能为空,但它可以包含为空的元素。为了更好地理解,请看下面的例子。

using System;
using System.Collections;
namespace Csharp8Features
{
    public class ArrayListDemo
    {
        public static void Main()
        {
            ArrayList arrayList1 = new ArrayList()
            {
                    "India",
                    "USA",
                    "UK",
                    "Nepal"
            };
            Console.WriteLine("Array List Elements");
            foreach (var item in arrayList1)
            {
                Console.Write($"{item} ");
            }

            ArrayList arrayList2 = new ArrayList()
            {
                    "Srilanka",
                    "Japan",
                    "Britem"
            };
            arrayList1.InsertRange(2, arrayList2);
            
            Console.WriteLine("\n\nArray List Elements After InsertRange");
            foreach (var item in arrayList1)
            {
                Console.Write($"{item} ");
            }

            Console.ReadKey();
        }
    }
}

如何在c#中删除数组列表中的元素?
如果你想在c#中从ArrayList中删除元素,那么你可以使用c#中ArrayList类的remove (), RemoveAt()或RemoveRange()方法。

Remove(对象?obj):此方法用于从System.Collections.ArrayList中删除第一次出现的特定对象。参数obj指定要从数组列表中移除的对象。可以为空。
RemoveAt(int index):该方法用于移除ArrayList中指定索引处的元素。参数index指定要删除的元素的索引位置。
RemoveRange(int index, int count):这个方法用于从ArrayList中移除一段元素。参数index指定要删除的元素范围的起始索引位置,参数count指定要删除的元素数量。
为了更好地理解,请看下面的例子。

 

using System;
using System.Collections;
namespace Csharp8Features
{
    public class ArrayListDemo
    {
        public static void Main()
        {
            ArrayList arrayList = new ArrayList()
            {
                    "India",
                    "USA",
                    "UK",
                    "Nepal",
                    "HongKong",
                    "Srilanka",
                    "Japan",
                    "Britem",
                    "HongKong",
            };

            Console.WriteLine("Array List Elements");
            foreach (var item in arrayList)
            {
                Console.Write($"{item} ");
            }

            arrayList.Remove("HongKong"); //Removes first occurance of null
            Console.WriteLine("\n\nArray List Elements After Removing First Occurances of HongKong");
            foreach (var item in arrayList)
            {
                Console.Write($"{item} ");
            }

            arrayList.RemoveAt(3); //Removes element at index postion 3, it is 0 based index
            Console.WriteLine("\n\nArray List1 Elements After Removing Element from Index 3");
            foreach (var item in arrayList)
            {
                Console.Write($"{item} ");
            }

            arrayList.RemoveRange(0, 2);//Removes two elements starting from 1st item (0 index)
            Console.WriteLine("\n\nArray List Elements After Removing First Two Elements");
            foreach (var item in arrayList)
            {
                Console.Write($"{item} ");
            }
            Console.ReadKey();
        }
    }
}

如何从c#中删除数组列表中的所有元素?
如果你想从ArrayList中删除所有元素或清除所有元素,那么你可以使用ArrayList类的clear()方法,但是这个方法不会减少ArrayList的容量。为了更好地理解,让我们看一个例子。

using System;
using System.Collections;
namespace Csharp8Features
{
    public class ArrayListDemo
    {
        public static void Main()
        {
            ArrayList arrayList = new ArrayList()
            {
                    "India",
                    "USA",
                    "UK",
                    "Denmark",
                    "Nepal",
            };

            int totalItems = arrayList.Count;
            Console.WriteLine(string.Format($"Total Items: {totalItems}, Capacity: {arrayList.Capacity}"));
            //Remove all items from the Array list             
            arrayList.Clear();

            totalItems = arrayList.Count;
            Console.WriteLine(string.Format($"Total Items After Clear(): {totalItems}, Capacity: {arrayList.Capacity}"));
            Console.ReadKey();
        }
    }
}

 

标签:Console,C#,ArrayList,元素,Add,item,arrayList1
From: https://www.cnblogs.com/keeplearningandsharing/p/18184549

相关文章

  • Intel 显卡单机多卡 FSDP 模型 checkpointing 时 Assert Out
    Intel显卡单机多卡FSDP模型checkpointing时AssertOut Intel显卡单机多卡FSDP模型checkpointing时AssertOut现象根因顺藤摸瓜抽丝剥茧解法最后的话现象使用HuggingFaceTrainer在单机多卡环境下对LLAMA2-7B进行LoRAfinetuning时,......
  • Docker 必知必会2----跟我一步步来执行基本操作
    通过前文(https://www.cnblogs.com/jilodream/p/18177695)的了解,我们已经大致明白了什么是docker,为什么要用docker,以及docker的基本设计思路是什么。今天来看下,docker的基本操作有哪些?1、linux下安装docker首先我们来安装docker,如下是使用centos7的安装办法,其他系统可以自行搜......
  • docker学习
    rm-fr/etc/yum.repos.d/local.repocurl-o/etc/yum.repos.d/CentOS-Base.repohttp://mirrors.aliyun.com/repo/Centos-7.repowget-O/etc/yum.repos.d/docker-ce.repohttps://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.reposed-i's#download.......
  • Electron桌面应用
    Electron介绍Electron集成了chromium(支持最新特性的浏览器)与Node.js(javascript运行时,可实现文件读写)NativeAPI是(提供统一原生界面操作的能力)工作流程:启动APP启动主进程,创建窗口,加载指定界面,开启渲染进程,渲染进程需要进行通信(如新增歌曲打开文件夹选择MP3文件)需通过主进程调用......
  • 致敬经典永垂不朽@Microsoft Windows
    1、MS-DOS7.10 2、Windows3.1 3、Windows3.2 4、WinNT4.0 5、Windows95 6、Windows98 7、Windows2000 8、WindowsME 9、WindowsVista 10、WindowsXP 11、Windows8 12、Windows10 13、Windows11 ......
  • Oracle Hint "index_combine"对于like的局限性
     OracleHint"index_combine"对于like的局限性 数据库版本:11.2.0.4.0今天遇到1条问题SQL,优化遇到一点问题,SQL文本大概如下:其中,col2和col3存在索引的且选择性都很高,col1的业务特性是只有两个值选择性低没有也不适合建Btree索引。导致每次执行都是全表扫描,统计发现这条SQL......
  • UcOs-III 源码阅读: os_tmr.c
    对定时器源文件os_tmr.c进行源码阅读与注释://功能:创建、删除、启动、停止、删除、初始化模块、获取定时器剩余时间、获取定时器状态、//创建定时器API:OS_TmrCreate//删除定时器API:OS_TmrDel//启动定时器API:O......
  • BIKE decode.c
    /******************************************************************************BIKE--BitFlippingKeyEncapsulationCopyright(c)2021NirDrucker,ShayGueron,RafaelMisoczki,TobiasOder,TimGueneysu,JanRichter-Brockmann.Contact:drucker.nir@g......
  • BIKE decode.h
    /******************************************************************************BIKE--BitFlippingKeyEncapsulationCopyright(c)2021NirDrucker,ShayGueron,RafaelMisoczki,TobiasOder,TimGueneysu,JanRichter-Brockmann.Contact:drucker.nir@g......
  • clickhuose config.xml文件
    <?xmlversion="1.0"?><yandex><logger><level>trace</level><log>/var/log/clickhouse-server/clickhouse-server.log</log><!--日志存放目录--><errorlog>/var/log/clic......