C#中的数组是由System.Array
类衍生出来的引用对象,因此可以使用Array类中的各种方法对数组进行各种操作。
System.Array
类是在C#中用于处理数组的基类。它是所有数组类型的基类,包括静态数组和动态数组(例如List<T>
)。System.Array
提供了许多有用的方法和属性,用于操作和管理数组。
以下是一些常用的System.Array
类成员:
Length
属性:获取数组的总元素数。Rank
属性:获取数组的维度数。GetLength(int dimension)
方法:获取指定维度的元素数。GetLowerBound(int dimension)
方法:获取指定维度的最小索引值。GetUpperBound(int dimension)
方法:获取指定维度的最大索引值。GetValue(params int[] indices)
方法:获取指定索引处的数组元素的值。SetValue(object value, params int[] indices)
方法:设置指定索引处的数组元素的值。Clone()
方法:创建当前数组的浅表副本。CopyTo(Array array, int index)
方法:将当前数组的元素复制到另一个数组中。IndexOf(object value)
方法:在数组中搜索指定的元素,并返回其第一个匹配项的索引。Sort()
方法:对数组的元素进行排序。
通过使用System.Array
类的这些成员,可以轻松地执行各种操作,例如获取数组的大小、访问特定元素、复制数组、搜索元素以及对数组进行排序等。
数组可以是静态数组或动态数组(也称为列表)。让我们更详细地了解它们吧。
静态数组: 静态数组是在编译时定义并具有固定长度的数组。它们使用固定的内存块来存储数据,并且在创建后大小不能更改。声明静态数组时,需要指定元素的类型和数组的大小。
静态数组在创建后无法动态调整大小,如果需要添加或删除元素,就需要创建一个新的数组,并将旧数组的值复制到新数组中。
动态数组(列表): 动态数组是在运行时创建并可以根据需要调整大小的数组。在C#中,System.Collections.Generic
命名空间提供了List<T>
类,它是一个动态数组的实现。与静态数组不同,动态数组可以动态地添加、删除和调整大小,无需创建新的数组。
动态数组(列表)相对于静态数组具有更多的灵活性和便利性,因为它们可以根据需要动态调整大小,并且提供了一组方便的方法来操作数组元素。然而,静态数组在某些情况下可能更加高效,因为它们在内存上是连续的,并且不需要额外的引用对象。因此,在选择使用静态数组还是动态数组时,需要根据具体需求和性能考虑做出决策。
一维数组
这段代码演示了如何在C#中定义和初始化一维数组。
-
定义和初始化整数数组:通过使用
new
关键字创建一个包含10个元素的整数数组IntArray
,并使用花括号{ }
初始化数组的元素。数组中的元素依次为1、2、3、4、5、6、7、8、9和10。 -
定义和初始化字符串数组:同样地,使用
new
关键字创建一个包含3个元素的字符串数组StrArray
,并使用索引方式为数组元素赋值。在示例中,给StrArray[0]
和StrArray[1]
赋值为字符串"abc"。
这些示例展示了如何定义和初始化一维数组,并在创建数组时指定初始元素的值。一维数组在C#中是最简单的数据结构之一,用于存储和处理多个相同类型的元素。
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// 定义一维数组
int[] IntArray = new int[10] {1,2,3,4,5,6,7,8,9,10};
// 定义一维字符串数组
string[] StrArray = new string[3];
StrArray[0] = "abc" ;
StrArray[1] = "abc";
Console.ReadKey();
}
}
}
删除一维数组中的元素
这段代码演示了如何遍历和删除一维数组中的元素。
-
遍历数组:使用
foreach
循环遍历整数数组IntArray
中的每个元素,并将其打印到控制台上。通过foreach
循环可以方便地遍历数组中的所有元素。 -
删除数组元素:通过循环删除第三个元素。在示例中,我们将变量
Del_Num
设置为2,表示要删除的元素的索引位置。使用for
循环从Del_Num
开始,将后面的元素依次向前移动一个位置,以覆盖要删除的元素。最后,数组的最后一个元素将会是重复的元素,可以将其忽略或修改为其他值。
请注意,删除数组元素可能会导致数组长度减少,因此需要相应地调整循环的范围。在示例中,我们使用IntArray.Length - Del_Num
作为循环的结束条件,以确保只处理剩余的有效元素。
这些示例展示了如何遍历数组和删除数组中的元素。一维数组是一种常见的数据结构,在C#中提供了丰富的操作和功能来处理和操作数组。
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// 定义一维数组
int[] IntArray = new int[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// 遍历数组
foreach (int num in IntArray)
Console.WriteLine(num);
Console.ReadLine();
// 通过循环删除第三个元素
int Del_Num = 2;
for (int x = Del_Num; x < IntArray.Length - Del_Num; x++)
{
IntArray[x] = IntArray[x - 1];
}
Console.ReadKey();
}
}
}
寻找最大最小值
这段代码演示了如何在一维数组中找到最大值、最小值、总和和平均值。
-
定义一维数组:使用
int[] Array
定义一个包含10个整数的一维数组,并为数组元素赋予初始值。 -
声明变量:声明变量
min
和max
,并将其分别初始化为int.MaxValue
和int.MinValue
。这样做是为了确保初始值为数组中的最大值和最小值。 -
遍历数组:使用
for
循环遍历数组中的每个元素。在循环中,比较每个元素与max
和min
的值,更新它们的值以确保它们存储了数组中的最大值和最小值。 -
计算总和:使用变量
sum
初始化为0,并在循环中将每个元素累加到sum
中,得到数组的总和。 -
计算平均值:通过将总和除以数组的长度,得到数组的平均值。
-
打印结果:使用
Console.WriteLine
打印最大值、最小值、总和和平均值。
该代码展示了如何通过遍历一维数组来查找最大值、最小值、总和和平均值。这些操作是处理数组数据时常见的需求。
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// 定义一维数组
int[] Array = new int[10] { 57, 32, 78, 96, 33, 11, 78, 3, 78, 2 };
// 声明两个变量用来存储最大值和最小值
int min = int.MaxValue;
int max = int.MinValue;
int sum = 0;
for (int i = 0; i < Array.Length; i++)
{
if (Array[i] > max)
max = Array[i];
if (Array[i] < min)
min = Array[i];
sum += Array[i];
}
Console.WriteLine("最大值: {0} 最小值: {1} 总和: {2} 平均值: {3}", max, min, sum, sum / Array.Length);
Console.ReadKey();
}
}
}
数组组合为字符串
这段代码演示了如何将字符串数组中的元素以竖线(|)连接起来。
-
定义字符串数组:使用
String[] name
定义一个包含多个姓名的字符串数组,并为数组元素赋予初始值。 -
声明变量:声明字符串变量
str
并将其初始化为null
。 -
遍历数组:使用
for
循环遍历数组中的每个元素,从第一个元素遍历到倒数第二个元素。 -
拼接字符串:在循环中,将当前元素与竖线符号(|)拼接到字符串变量
str
后面。 -
添加最后一个元素:在循环结束后,将数组最后一个元素与字符串变量
str
拼接起来。 -
打印结果:使用
Console.WriteLine
打印拼接后的字符串。
该代码的目的是将字符串数组中的元素以竖线(|)连接起来,形成一个字符串。这样的操作通常用于将多个字符串合并成一个字符串,以便于显示或处理。
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
String[] name = { "老杨", "老苏", "老邹", "老虎", "老牛", "老马" };
string str = null;
for (int x = 0; x < name.Length - 1; x++)
str += name[x] + "|";
Console.WriteLine(str + name[name.Length - 1]);
Console.ReadKey();
}
}
}
数组元素反转
这段代码的目的是将字符串数组中的元素反转并以竖线(|)连接起来进行输出。
-
定义字符串数组:使用
String[] name
定义一个包含多个姓名的字符串数组,并为数组元素赋予初始值。 -
声明临时变量:声明字符串变量
tmp
,用于在元素交换时暂存元素的值。 -
数组元素反转:使用
for
循环从数组的开头和末尾开始交换元素,将数组中的元素进行反转。 -
输出结果:使用
for
循环遍历反转后的数组,将每个元素与竖线符号(|)连接起来,并使用Console.Write
逐个输出元素。 -
读取用户输入:使用
Console.ReadKey
等待用户按下任意键后程序结束。
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
String[] name = { "老杨", "老苏", "老邹", "老虎", "老牛", "老马" };
string tmp;
for (int x = 0; x < name.Length / 2; x++)
{
tmp = name[name.Length - 1 - x];
name[x] = name[name.Length - 1 - x];
name[name.Length - 1 - x] = tmp;
}
for (int x = 0; x < name.Length - 1; x++)
Console.Write(name[x] + " |" );
Console.ReadKey();
}
}
}
冒泡排序
这段代码实现了对整型数组进行排序,并输出排序结果。同时,使用了系统提供的方法进行排序和反向排序。
代码主要分为三个部分:
-
Sort
方法:该方法用于实现冒泡排序算法,对传入的整型数组进行排序。使用两层循环进行比较和交换操作,将较大的元素逐步移到数组的末尾。 -
Display
方法:该方法用于输出整型数组的元素。使用循环遍历数组,将每个元素输出到控制台。 -
Main
方法:程序的入口点。在该方法中,定义了一个整型数组MyArray
并初始化。然后调用Sort
方法对数组进行排序,并调用Display
方法输出排序结果。接下来,使用
Array.Sort
方法对数组进行排序,并使用Array.Reverse
方法进行一次反向排序。最后,使用
Console.ReadKey
等待用户按下任意键后程序结束。
以上是代码的主要逻辑和功能。这段代码使用冒泡排序算法对整型数组进行排序,并通过自定义的方法和系统提供的方法分别输出排序结果。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
// 执行排序
static void Sort(int[] Array)
{
for (int x = 0; x < Array.Length - 1; x++)
{
for (int y = 0; y < Array.Length - 1 - x; y++)
{
if (Array[y] > Array[y + 1])
{
int tmp = Array[y];
Array[y] = Array[y + 1];
Array[y+1] = tmp;
}
}
}
}
// 输出结果
static void Display(int[] Array)
{
for (int x = 0; x < Array.Length; x++)
{
Console.Write(Array[x] + " ");
}
}
static void Main(string[] args)
{
int[] MyArray = new int[10] { 57, 32, 4, 96, 33, 11, 78, 3, 78, 2 };
Sort(MyArray);
Display(MyArray);
// 使用系统提供的方法排序
Array.Sort(MyArray);
// 执行一次反向排序
Array.Reverse(MyArray);
Console.ReadKey();
}
}
}
直接插入排序
这段代码实现了插入排序算法,对整型数组进行排序,并输出排序结果。
代码主要包含两个部分:
-
Sort
方法:该方法用于实现插入排序算法,对传入的整型数组进行排序。通过循环遍历数组元素,将当前元素插入已排序序列的正确位置。在每次遍历中,将当前元素与已排序序列的元素逐个比较并移动,直到找到合适的位置。 -
Main
方法:程序的入口点。在该方法中,定义了一个整型数组MyArray
并初始化。然后调用Sort
方法对数组进行排序,并使用foreach
循环输出排序结果。
最后,使用 Console.ReadKey
等待用户按下任意键后程序结束。
以上是代码的主要逻辑和功能。这段代码使用插入排序算法对整型数组进行排序,并输出排序结果。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
// 执行排序
static void Sort(int[] Array)
{
for (int x = 0; x < Array.Length; x++)
{
int tmp = Array[x];
int y = x;
while ((y > 0) && (Array[y - 1] > tmp))
{
Array[y] = Array[y-1];
--y;
}
Array[y] = tmp;
}
}
static void Main(string[] args)
{
int[] MyArray = new int[10] { 57, 32, 4, 96, 33, 11, 78, 3, 78, 2 };
Sort(MyArray);
foreach (int x in MyArray)
Console.Write(x + " ");
Console.ReadKey();
}
}
}
选择排序
这段代码实现了选择排序算法,对整型数组进行排序,并输出排序结果。
代码主要包含两个部分:
-
Sort
方法:该方法用于实现选择排序算法,对传入的整型数组进行排序。通过两层循环遍历数组元素,每次选择当前未排序部分中的最小元素,与未排序部分的第一个元素交换位置,将最小元素放在已排序部分的末尾。 -
Main
方法:程序的入口点。在该方法中,定义了一个整型数组MyArray
并初始化。然后调用Sort
方法对数组进行排序,并使用foreach
循环输出排序结果。
最后,使用 Console.ReadKey
等待用户按下任意键后程序结束。
以上是代码的主要逻辑和功能。这段代码使用选择排序算法对整型数组进行排序,并输出排序结果。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
// 执行排序
static void Sort(int[] Array)
{
int min = 0;
for (int x = 0; x < Array.Length; x++)
{
min = x;
for (int y = x + 1; y < Array.Length; y++)
{
if (Array[y] < Array[min])
min = y;
}
int tmp = Array[min];
Array[min] = Array[x];
Array[x] = tmp;
}
}
static void Main(string[] args)
{
int[] MyArray = new int[10] { 57, 32, 4, 96, 33, 11, 78, 3, 78, 2 };
Sort(MyArray);
foreach (int x in MyArray)
Console.Write(x + " ");
Console.ReadKey();
}
}
}
定义二维数组
这段代码定义了一个二维数组 Array
,并对其进行操作和输出。
代码主要包含以下几个部分:
-
定义二维数组:通过
int[,]
关键字定义一个二维数组,并使用初始化器{ { 1, 2, 4 }, { 4, 5, 6 } }
对数组进行初始化。 -
获取数组的行数和列数:使用
Array.Rank
获取数组的维度数(此处为 2),使用Array.GetUpperBound(Array.Rank - 1) + 1
获取数组的列数。 -
遍历和输出数组元素:使用两层循环遍历二维数组的行和列,内层循环遍历列数,并将数组元素转换为字符串拼接在一起。然后使用
Console.WriteLine
输出每一行的元素。 -
最后,使用
Console.ReadKey
等待用户按下任意键后程序结束。
以上是代码的主要逻辑和功能。这段代码定义了一个二维数组,输出了数组的行数和列数,并遍历输出了数组的元素。
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// 定义二维数组
int[,] Array = new int[2,3]{{1,2,4},{4,5,6}};
Console.WriteLine("数组行数为: {0}", Array.Rank);
Console.WriteLine("数组列数为: {0}", Array.GetUpperBound(Array.Rank - 1) + 1);
for (int x = 0; x < Array.Rank;x++ )
{
string str = "";
for(int y=0;y< Array.GetUpperBound(Array.Rank-1)+1;y++)
{
str = str + Convert.ToString(Array[x, y]) + " ";
}
Console.Write(str);
}
Console.ReadKey();
}
}
}
定义动态二维数组
这段代码实现了根据用户输入的行数和列数创建一个二维数组,并输出数组的索引信息。
代码主要包含以下几个部分:
-
通过
Console.ReadLine()
获取用户输入的行数和列数,并使用Convert.ToInt32
将输入的字符串转换为整数类型,分别赋值给Row
和Col
变量。 -
根据用户输入的行数和列数创建二维数组
Array
。 -
使用嵌套的循环遍历数组的每一个元素,外层循环控制行,内层循环控制列。在循环体内,使用
Console.Write
输出当前元素的索引信息,包括行号和列号,以便区分不同的元素。 -
在内层循环结束后,使用
Console.WriteLine
输出换行符,实现输出一行后换行。 -
最后,使用
Console.ReadKey
等待用户按下任意键后程序结束。
以上是代码的主要逻辑和功能。用户可以输入行数和列数,程序会根据输入创建一个二维数组,并输出数组中每个元素的索引信息。
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int Row = Convert.ToInt32(Console.ReadLine());
int Col = Convert.ToInt32(Console.ReadLine());
int[,] Array = new int[Row, Col];
for (int x = 0; x < Row; x++)
{
for (int y = 0; y < Col; y++)
{
Console.Write(x + "-->" + y.ToString() + " ");
}
Console.WriteLine();
}
Console.ReadKey();
}
}
}
一维数组的合并
这段代码实现了将两个数组 Array1 和 Array2 合并成一个新的数组 Array3。
代码主要包含以下几个部分:
-
创建两个整数数组 Array1 和 Array2,分别赋值为 {1, 2, 3, 4, 5} 和 {6, 7, 8, 9, 10}。
-
计算合并后的数组长度,即 Array1.Length + Array2.Length,并将结果赋值给变量 Count。
-
创建一个新的整数数组 Array3,长度为 Count。
-
使用循环遍历数组 Array3,通过判断索引 x 的值来确定是从 Array1 还是 Array2 中取值。当 x 小于 Array1 的长度时,将 Array1[x] 的值赋给 Array3[x];当 x 大于等于 Array1 的长度时,将 Array2[x - Array1.Length] 的值赋给 Array3[x]。
-
使用 foreach 循环遍历数组 Array3,输出每个元素的值。
-
最后,使用
Console.ReadKey
等待用户按下任意键后程序结束。
以上是代码的主要逻辑和功能。它将两个数组合并成一个新的数组,并输出合并后的数组。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int[] Array1 = new int[] { 1, 2, 3, 4, 5 };
int[] Array2 = new int[] { 6, 7, 8, 9, 10 };
// 将Array1 与 Array2 合并成 Array3
int Count = Array1.Length + Array2.Length;
int[] Array3 = new int[Count];
for (int x = 0; x < Array3.Length; x++)
{
if (x < Array1.Length)
Array3[x] = Array1[x];
else
Array3[x] = Array2[x - Array1.Length];
}
foreach (int each in Array3)
Console.Write(each + " ");
Console.ReadKey();
}
}
}
二维数组的合并
这段代码实现了将两个一维数组 Array1 和 Array2 合并到一个二维数组 Array3 中,并输出合并后的二维数组。
代码主要包含以下几个部分:
-
创建两个整数数组 Array1 和 Array2,分别赋值为 {1, 2, 3, 4, 5} 和 {6, 7, 8, 9, 10}。
-
创建一个二维整数数组 Array3,维度为 2 行 5 列,用于存储合并后的数据。
-
使用循环遍历二维数组 Array3,通过 switch-case 结构判断当前是处理 Array1 还是 Array2 的数据。
-
当 x = 0 时,通过内部的循环将 Array1 的数据逐个赋值给 Array3 的第一行。
-
当 x = 1 时,通过内部的循环将 Array2 的数据逐个赋值给 Array3 的第二行。
-
使用嵌套循环遍历二维数组 Array3,并使用 Console.Write 输出每个元素的值。外层循环控制行数,内层循环控制列数。
-
最后,使用
Console.ReadKey
等待用户按下任意键后程序结束。
以上是代码的主要逻辑和功能。它将两个一维数组合并到一个二维数组中,并输出合并后的二维数组。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int[] Array1 = new int[] { 1, 2, 3, 4, 5 };
int[] Array2 = new int[] { 6, 7, 8, 9, 10 };
// 将两个一维数组,合并到一个二维数组中
int[,] Array3 = new int[2, 5];
// Rank = 二维数组中的2
for (int x = 0; x < Array3.Rank; x++)
{
switch (x)
{
case 0:
{
for (int y = 0; y < Array1.Length; y++)
Array3[x, y] = Array1[y];
break;
}
case 1:
{
for (int z = 0; z < Array2.Length; z++)
Array3[x, z] = Array2[z];
break;
}
}
}
// 输出二维数组中的数据
for (int x = 0; x < Array3.Rank;x++ )
{
for(int y=0;y<Array3.GetUpperBound(Array3.Rank-1)+1;y++)
Console.Write(Array3[x, y] + " ");
Console.WriteLine();
}
Console.ReadKey();
}
}
}
二维数组的拆分
这段代码实现了从一个二维数组 Array 中提取数据,并分别存储到两个一维数组 ArrayOne 和 ArrayTwo 中,并输出 ArrayOne 中的数据。
代码主要包含以下几个部分:
-
创建一个二维整数数组 Array,维度为 2 行 3 列,并初始化数组的值。
-
创建两个一维整数数组 ArrayOne 和 ArrayTwo,分别用于存储提取的数据。
-
使用嵌套循环遍历二维数组 Array。外层循环控制行数,内层循环控制列数。
-
在内层循环中,通过 switch-case 结构判断当前是处理第一行的数据还是第二行的数据。
-
当 x = 0 时,将当前元素 Array[x, y] 的值赋给 ArrayOne 数组中对应位置的元素 ArrayOne[y]。
-
当 x = 1 时,将当前元素 Array[x, y] 的值赋给 ArrayTwo 数组中对应位置的元素 ArrayTwo[y]。
-
使用 foreach 循环遍历 ArrayOne 数组,并使用 Console.WriteLine 输出每个元素的值。
-
最后,使用
Console.ReadKey
等待用户按下任意键后程序结束。
以上是代码的主要逻辑和功能。它从二维数组中提取数据,并分别存储到两个一维数组中,然后输出 ArrayOne 数组的数据。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int[,] Array = new int[2, 3] { { 1, 3, 5 }, { 3, 4, 6 } };
int[] ArrayOne = new int[3];
int[] ArrayTwo = new int[4];
for (int x = 0; x < 2; x++)
{
for(int y= 0; y<3; y++)
{
switch(x)
{
case 0: ArrayOne[y] = Array[x, y]; break;
case 1: ArrayTwo[y] = Array[x, y]; break;
}
}
}
foreach (int each in ArrayOne)
Console.WriteLine(each);
Console.ReadKey();
}
}
}
ArrayList 类位于System.Collections
命名空间下,它可以动态添加和删除元素,可以将该数组类看作扩充了功能的数组。
动态数组创建
这段代码演示了如何使用 ArrayList
类来创建动态数组,并展示了一些基本操作。
代码主要包含以下几个部分:
-
创建了一个
ArrayList
对象List
,并设置其初始容量为 10。 -
使用
for
循环向List
中添加了 9 个元素,从 0 到 8。 -
使用
List.Capacity
属性获取List
的容量(即预分配的内部数组大小),并使用List.Count
属性获取List
中实际包含的元素数量。 -
使用
foreach
循环遍历List
,并输出每个元素的值。 -
创建一个普通整数数组
Array
,其中包含 1 到 10 的元素。 -
使用
ArrayList
的另一个构造函数,将Array
添加到新创建的List1
中。 -
使用
for
循环遍历List1
,并输出每个元素的值。 -
使用
Console.ReadKey
等待用户按下任意键后程序结束。
总结来说,这段代码演示了如何使用 ArrayList
创建动态数组,并展示了如何添加元素、获取容量和数量、以及遍历和输出数组元素的方法。
using System;
using System.Collections;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// 动态创建 ArrayList 并初始化10个数据
ArrayList List = new ArrayList(10);
for (int x = 0; x < 9; x++)
List.Add(x);
Console.WriteLine("可包含元素数量: {0} ", List.Capacity);
Console.WriteLine("实际包含数量: {0}", List.Count);
foreach (int each in List)
Console.Write(each + " ");
Console.WriteLine();
// 将普通数组添加到ArrayList中
int[] Array = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
ArrayList List1 = new ArrayList(Array);
for (int x = 0; x < List1.Count; x++)
Console.Write(List1[x] + " ");
Console.ReadKey();
}
}
}
增加/插入/删除元素
这段代码演示了使用 ArrayList
类进行数组操作的一些示例。
代码主要包含以下几个部分:
-
定义了一个静态方法
Display
,用于遍历并显示ArrayList
中的元素。 -
创建了一个
ArrayList
对象List
,并设置其初始容量为 10。 -
使用
List.Add
方法向List
中添加了五个整数元素。 -
调用
Display
方法遍历并显示List
中的元素。 -
使用
List.Insert
方法在指定位置插入元素。 -
再次调用
Display
方法遍历并显示更新后的List
。 -
使用
List.Remove
方法移除指定元素。 -
再次调用
Display
方法遍历并显示更新后的List
。 -
使用
List.RemoveAt
方法根据索引移除元素。 -
再次调用
Display
方法遍历并显示更新后的List
。 -
使用
List.Contains
方法判断List
是否包含指定元素,并将结果输出。 -
使用
List.RemoveRange
方法移除指定范围的元素。 -
再次调用
Display
方法遍历并显示更新后的List
。 -
使用
List.Clear
方法清空所有元素。 -
使用
Console.ReadKey
等待用户按下任意键后程序结束。
总结来说,这段代码演示了如何使用 ArrayList
进行动态数组操作,包括添加元素、插入元素、移除元素、判断是否包含元素、移除范围以及清空所有元素等操作。通过调用不同的方法,可以对 ArrayList
进行灵活的数组操作。
using System;
using System.Collections;
namespace ConsoleApplication1
{
class Program
{
static void Display(ArrayList x)
{
foreach (int each in x)
Console.Write(each + " ");
Console.WriteLine();
}
static void Main(string[] args)
{
// 动态创建 ArrayList
ArrayList List = new ArrayList(10);
// 像数组增加数据
List.Add(100);
List.Add(200);
List.Add(300);
List.Add(400);
List.Add(500);
Display(List);
// 插入数据
List.Insert(1, 1000);
List.Insert(2, 2000);
Display(List);
// 移除指定元素
List.Remove(1000);
Display(List);
// 根据索引移除元素
List.RemoveAt(1);
Display(List);
// 判断集合中是否包含指定元素
bool ret = List.Contains(100);
Console.WriteLine(ret);
// 移除一个范围,从下标1开始向后移除3个元素
List.RemoveRange(1, 3);
Display(List);
// 清空所有集合
List.Clear();
Console.ReadKey();
}
}
}
生成随机数存入集合
这段代码演示了使用 ArrayList
进行集合操作的一些示例。
代码主要包含以下几个部分:
-
创建了一个
ArrayList
对象list
。 -
使用
list.AddRange
方法将一个整数数组添加到list
中。 -
定义变量
sum
和max
,用于计算总和和最大值。初始时,将max
设置为第一个元素的值。 -
使用循环遍历
list
,计算总和和更新最大值。 -
输出最大值、总和和平均值(通过将总和除以元素数量)。
-
调用
list.Clear
方法清空list
中的元素。 -
创建一个
Random
对象rand
,用于生成随机数。 -
使用循环生成随机数,并判断随机数是否已存在于
list
中。如果不存在,则将随机数添加到list
中;如果已存在,则忽略该随机数,继续生成下一个随机数。 -
使用
foreach
循环遍历并输出list
中的元素。 -
使用
Console.ReadKey
等待用户按下任意键后程序结束。
总结来说,这段代码演示了如何使用 ArrayList
进行集合操作,包括计算总和、最大值和平均值,以及生成随机数并去重后放入集合中。通过使用 ArrayList
的方法和功能,可以方便地进行集合操作和处理。
using System;
using System.Collections;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
ArrayList list = new ArrayList();
// 创建集合,添加数字,求平均值与和,最大值,最小值
list.AddRange(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
int sum = 0;
int max = (int)list[0];
for (int x = 0; x < list.Count;x++ )
{
if((int)list[x] > max)
max = (int)list[x];
sum += (int)list[x];
}
Console.WriteLine("最大值: {0} 总和: {1} 平均值: {2}",max,sum,sum/list.Count);
list.Clear();
// 用来生成随机数,并去重后放入list链表中
Random rand = new Random();
for (int x = 0; x < 10;x++ )
{
int num = rand.Next(0,10);
// 判断集合中是否有这个随机数
if (!list.Contains(num))
list.Add(num);
else
x--;
}
foreach (int each in list)
Console.WriteLine(each);
Console.ReadKey();
}
}
}
增加并遍历数组
这段代码演示了使用 ArrayList
存储不同类型的数组,并对其进行遍历和访问的示例。
代码主要包含以下几个部分:
-
创建了一个
ArrayList
对象list
。 -
使用
list.Add
方法将匿名数组和已定义的数组添加到list
中。 -
使用循环遍历
list
,对于其中的每个元素,检查其类型是否为数组类型(通过is
关键字判断)。 -
如果元素是数组类型,则使用强制类型转换
((int[])list[x])
将其转换为int[]
数组,并使用内部的Length
属性获取数组长度。 -
使用嵌套循环遍历并输出数组中的元素。
-
使用
Console.ReadKey
等待用户按下任意键后程序结束。
总结来说,这段代码演示了使用 ArrayList
存储不同类型的数组,并通过遍历和类型转换来访问这些数组的元素。通过使用 ArrayList
,可以在一个集合中存储多种类型的数组,以便进行统一的处理和访问。
using System;
using System.Collections;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
ArrayList list = new ArrayList();
// 直接追加匿名数组
list.Add(new int[] { 1, 2, 3, 4, 5 });
list.Add(new int[] { 6, 7, 8, 9, 10 });
// 定义并追加数组
int[] ptr = new int[5] { 100, 200, 300, 400, 500 };
list.Add(ptr);
for (int x = 0; x < list.Count;x++ )
{
if (list[x] is int[])
{
for(int y=0; y < ((int[])list[x]).Length; y++)
{
Console.Write(((int[])list[x])[y] + " ");
}
Console.WriteLine();
}
}
Console.ReadKey();
}
}
}
增加遍历结构体
这段代码演示了使用 ArrayList
存储自定义的结构体,并对其进行遍历和访问的示例。
代码主要包含以下几个部分:
-
定义了一个名为
Student
的结构体,其中包含了三个字段:u_id
(学生ID)、u_name
(学生姓名)和u_age
(学生年龄)。 -
创建了一个
ArrayList
对象list
。 -
定义了三个
Student
结构体实例stu1
、stu2
和stu3
,并分别初始化它们的字段值。 -
使用
list.Add
方法将这三个结构体实例添加到list
中。 -
使用循环遍历
list
,对于其中的每个元素,检查其类型是否为Student
结构体类型(通过is
关键字判断)。 -
如果元素是
Student
结构体类型,则使用强制类型转换(Student)list[x]
将其转换为Student
结构体,并访问其字段值。 -
输出每个学生的ID、姓名和年龄。
-
使用
Console.ReadKey
等待用户按下任意键后程序结束。
总结来说,这段代码演示了如何使用 ArrayList
存储自定义的结构体,并通过遍历和类型转换来访问结构体的字段值。通过使用 ArrayList
,可以在一个集合中存储多个结构体实例,以便进行统一的处理和访问。
using System;
using System.Collections;
namespace ConsoleApplication1
{
class Program
{
public struct Student
{
public int u_id;
public string u_name;
public int u_age;
public Student(int id, string name, int age)
{
this.u_id = id;
this.u_name = name;
this.u_age = age;
}
}
static void Main(string[] args)
{
ArrayList list = new ArrayList();
// 定义三个结构
Student stu1 = new Student(1001,"admin",22);
Student stu2 = new Student(1002, "guest", 33);
Student stu3 = new Student(1003, "lyshark", 19);
// 将结构追加到链表
list.Add(stu1);
list.Add(stu2);
list.Add(stu3);
// 遍历结构体
for (int x = 0; x < list.Count;x++ )
{
if (list[x] is Student)
{
Student ptr = (Student)list[x];
Console.WriteLine("ID: {0} 姓名: {1} 年龄: {2}", ptr.u_id, ptr.u_name, ptr.u_age);
}
}
Console.ReadKey();
}
}
}
队列的使用
这段代码演示了使用 Queue
(队列)的基本操作,包括入队、遍历和出队。
代码主要包含以下几个部分:
-
创建了一个
Queue
对象queue
。 -
使用循环将数字从 0 到 9 入队,通过
Enqueue
方法将每个数字添加到队列中,并使用queue.Count
输出队列中的元素数量。 -
使用
foreach
循环遍历队列中的元素,通过Peek
方法查看队列的头部元素,然后输出队列头部元素和当前遍历的元素。 -
使用
Dequeue
方法弹出队列中的元素,将其转换为整数类型并输出弹出的元素值。 -
通过循环不断执行步骤 4,直到队列中的元素全部出队。
-
使用
Console.ReadKey
等待用户按下任意键后程序结束。
总结来说,这段代码演示了如何使用 Queue
实现先进先出(FIFO)的数据结构。通过 Enqueue
方法可以将元素入队,通过 Dequeue
方法可以将元素出队,并使用 Peek
方法查看队列的头部元素,同时可以使用 Count
属性获取队列中的元素数量。队列常用于实现一些需要按照顺序处理数据的场景,例如任务队列、消息队列等。
using System;
using System.Collections;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Queue queue = new Queue();
// 入队
for (int x = 0; x < 10;x++ )
{
queue.Enqueue(x);
Console.WriteLine("{0} 入队 -> 队列计数: {1}", x,queue.Count);
}
// 遍历队列
foreach(int each in queue)
{
Console.WriteLine("队列开始: {0} --> 队列元素: {1}", queue.Peek().ToString(),each);
}
// 弹出队列
while(queue.Count !=0)
{
int value = (int)queue.Dequeue();
Console.WriteLine("{0} 出队列.", value);
}
Console.ReadKey();
}
}
}
栈操作
这段代码演示了使用 Stack
(栈)的基本操作,包括向栈中添加数据、查询栈顶元素、移出栈顶元素、遍历栈以及出栈操作。
代码主要包含以下几个部分:
-
创建了一个
Stack
对象stack
。 -
使用循环将数字从 0 到 9 入栈,通过
Push
方法将每个数字添加到栈中。 -
使用
Peek
方法查询栈顶元素,并通过Pop
方法移出栈顶元素。通过输出语句展示了当前栈顶元素和移出的栈顶元素。 -
使用
foreach
循环遍历栈中的元素,直接输出每个元素。 -
使用循环和
Pop
方法执行出栈操作,将栈中的元素逐个弹出并输出。 -
通过
Console.ReadKey
等待用户按下任意键后程序结束。
总结来说,这段代码演示了如何使用 Stack
实现后进先出(LIFO)的数据结构。通过 Push
方法可以将元素入栈,通过 Pop
方法可以将栈顶元素移出栈,并使用 Peek
方法查询栈顶元素,同时可以使用 Count
属性获取栈中的元素数量。栈常用于实现一些需要按照相反顺序处理数据的场景,例如函数调用栈、表达式求值等。
using System;
using System.Collections;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Stack stack = new Stack();
// 向栈追加数据
for (int x = 0; x < 10; x++)
stack.Push(x);
// 查询栈
Console.WriteLine("当前栈顶元素为:{0}", stack.Peek().ToString());
Console.WriteLine("移出栈顶元素:{0}", stack.Pop().ToString());
Console.WriteLine("当前栈顶元素为:{0}", stack.Peek().ToString());
// 遍历栈
foreach (int each in stack)
Console.WriteLine(each);
// 出栈
while(stack.Count !=0)
{
int pop = (int)stack.Pop();
Console.WriteLine("{0} 出栈", pop);
}
Console.ReadKey();
}
}
}
Hashtable 表的使用
这段代码演示了使用 Hashtable
(哈希表)的基本操作,包括添加键值对、移除哈希值、根据键查找值、遍历哈希表以及清空哈希表。
代码主要包含以下几个部分:
-
创建了一个
Hashtable
对象hash
。 -
使用
Add
方法向哈希表中添加键值对,其中键和值可以是任意类型的对象。 -
使用
Remove
方法移除指定的键值对,这里移除了键为 "sex" 的项。 -
使用
Contains
方法根据键查找哈希表中是否存在指定的键或值。通过输出语句展示了根据键查找键值对和根据值查找键值对的结果。 -
使用
foreach
循环遍历哈希表中的键值对,通过DictionaryEntry
类型的对象可以获取键和值。 -
使用
Clear
方法清空哈希表中的所有键值对。 -
通过
Console.ReadKey
等待用户按下任意键后程序结束。
总结来说,这段代码演示了如何使用 Hashtable
来存储键值对数据,并进行基本的操作。哈希表是一种根据键来快速查找值的数据结构,具有快速的查找性能。注意,Hashtable
是非泛型集合,可以存储任意类型的键和值。在实际应用中,建议使用泛型集合 Dictionary<TKey, TValue>
来替代 Hashtable
,因为泛型集合提供了类型安全和更好的性能。
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Hashtable hash = new Hashtable();
// 添加键值对 key = value
hash.Add("id", 1001);
hash.Add("name", "lyshark");
hash.Add("sex", "男");
Console.WriteLine("hash 元素个数: {0}", hash.Count);
// 移除一个hash值
hash.Remove("sex");
// 根据hash查找 是否存在
Console.WriteLine("根据key查找: {0}", hash.Contains("name"));
Console.WriteLine("根据key查找: {0}", hash.ContainsValue("lyshark"));
// 遍历hash表
foreach (DictionaryEntry each in hash)
Console.WriteLine(each.Key + "\t" + each.Value);
Console.WriteLine();
// 清空hash表
hash.Clear();
Console.ReadKey();
}
}
}
SortedList 有序哈希表
这段代码演示了使用 SortedList
(有序列表)的基本操作,包括添加元素、判断值是否存在、遍历列表、删除元素以及获取键的集合。
代码主要包含以下几个部分:
-
创建了一个
SortedList
对象student
。 -
使用
Add
方法向有序列表中添加键值对,其中键为学生的ID,值为学生的姓名。 -
使用
ContainsValue
方法判断是否存在某个值,如果不存在则添加键值对到列表中。 -
使用
foreach
循环遍历有序列表中的键值对,通过DictionaryEntry
类型的对象可以获取键和值。 -
使用
Remove
方法删除指定的键值对,这里删除了键为 "1001" 的项。 -
使用
Keys
属性获取有序列表中的键的集合,并使用foreach
循环遍历键的集合,通过键获取对应的值。 -
通过
Console.ReadKey
等待用户按下任意键后程序结束。
总结来说,这段代码演示了如何使用 SortedList
来存储键值对数据,并进行基本的操作。有序列表是一种根据键进行排序的数据结构,可以快速查找和访问键值对。需要注意的是,有序列表是根据键的顺序进行排序的,而不是值的顺序。如果需要根据值进行排序,可以考虑使用其他集合类型,例如 List
结合自定义的排序逻辑或者使用 SortedDictionary
。
using System;
using System.Collections;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
SortedList student = new SortedList();
// 向序列追加集合
student.Add("1001", "Lucy");
student.Add("1002", "Lily");
student.Add("1003", "Tom");
// 先判断是否存在某个值然后咋追加
if (!student.ContainsValue("LyShark"))
student.Add("1004", "LyShark");
// 遍历学生数据
foreach(DictionaryEntry each in student)
{
string id = each.Key.ToString();
string name = each.Value.ToString();
Console.WriteLine("ID: {0} 姓名: {1}", id, name);
}
// 删除一个数据
student.Remove("1001");
// 获取键的集合
ICollection key = student.Keys;
foreach(string each in key)
{
Console.WriteLine(each + "--> " + student[each]);
}
Console.ReadKey();
}
}
}
泛型类型集合
这段代码演示了使用泛型集合 List<T>
的基本操作,包括添加元素、批量添加元素、将泛型集合转换为数组以及将数组转换为泛型集合。
代码主要包含以下几个部分:
-
创建了一个泛型集合
List<int>
对象list
,并使用Add
方法向集合中添加元素。 -
使用
AddRange
方法批量添加元素,可以传入数组或者另一个集合作为参数。 -
使用
ToArray
方法将泛型集合转换为数组,返回一个包含集合元素的数组。这里将list
转换为int[]
类型的数组,并输出数组的长度。 -
创建了一个字符数组
chs
,并使用ToList
方法将字符数组转换为泛型集合List<char>
。这里演示了将数组转换为泛型集合的操作。 -
通过
Console.ReadKey
等待用户按下任意键后程序结束。
总结来说,这段代码演示了如何使用泛型集合 List<T>
来存储和操作具有相同类型的元素。泛型集合提供了强类型安全和更高效的操作,可以方便地进行元素的添加、删除、查找和转换等操作。通过泛型集合,可以在编译时进行类型检查,避免了装箱和拆箱的开销,并且提供了更好的性能和代码可读性。
using System;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// 创建泛型集合对象
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
list.AddRange(new int[] { 1, 2, 3, 4, 5, 6 });
list.AddRange(list);
// List泛型集合可以转换为数组
int[] array = list.ToArray();
Console.WriteLine("数组成员数: {0}", array.Length);
// 字符数组转换为泛型集合
char[] chs = new char[] { 'a', 'b', 'c' };
List<char> list_char = chs.ToList();
Console.WriteLine("字符数组成员数: {0}",list_char.Count);
Console.ReadKey();
}
}
}
k-v泛型集合
这段代码演示了使用泛型集合 Dictionary<TKey, TValue>
的基本操作,包括添加键值对、遍历字典以及通过键访问值。
代码主要包含以下几个部分:
-
创建了一个泛型集合
Dictionary<int, string>
对象dict
,其中键的类型为int
,值的类型为string
。 -
使用
Add
方法向字典中添加键值对。这里使用整数作为键,字符串作为值。 -
使用
foreach
循环遍历字典,通过KeyValuePair<int, string>
类型的变量each
获取每个键值对。在循环体内,输出每个键值对的键和值。 -
使用
foreach
循环遍历字典的键集合dict.Keys
,通过键访问对应的值。在循环体内,输出每个键和对应的值。 -
通过
Console.ReadKey
等待用户按下任意键后程序结束。
总结来说,这段代码演示了如何使用泛型集合 Dictionary<TKey, TValue>
来存储和操作键值对。泛型字典提供了以键为索引快速查找值的功能,并且可以遍历字典中的键值对或者只遍历键。通过泛型字典,可以方便地根据键访问对应的值,并且具备高效的查找和访问性能。
using System;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Dictionary<int, string> dict = new Dictionary<int, string>();
dict.Add(1, "张三");
dict.Add(2, "李四");
dict.Add(3, "王五");
foreach(KeyValuePair<int,string> each in dict)
{
Console.WriteLine("序号:{0} 数值:{1}", each.Key, each.Value);
}
foreach(var each in dict.Keys)
{
Console.WriteLine("序号:{0} 数值:{1}", each, dict[each]);
}
Console.ReadKey();
}
}
}
k-v泛型集合
这段代码用于统计给定字符串中每个字符出现的次数,并将结果存储在字典中。
代码主要包含以下几个部分:
-
创建了一个字符串
str
,内容为 "welcome to china"。 -
创建一个泛型字典
Dictionary<char, int>
,用于存储每个字符及其出现的次数。其中键的类型为char
,值的类型为int
。 -
使用
for
循环遍历字符串中的每个字符。如果当前字符是空格,则跳过本次循环。 -
在循环中,使用
ContainsKey
方法判断字典中是否已经包含当前字符作为键。如果包含,则将该键对应的值加1;否则,将该字符作为键,初始值设为1。 -
完成循环后,使用
foreach
循环遍历字典的键值对。通过KeyValuePair<char, int>
类型的变量each
获取每个键值对。在循环体内,输出每个字符及其出现的次数。 -
使用
Console.ReadKey
等待用户按下任意键后程序结束。
总结来说,这段代码演示了如何统计给定字符串中每个字符出现的次数,并使用泛型字典 Dictionary<TKey, TValue>
进行存储和操作。通过遍历字符串中的每个字符,可以判断字符是否已经在字典中存在,并根据情况进行相应的处理。最后,遍历字典输出每个字符及其出现的次数。这种方法可以快速统计字符串中各个字符出现的频率。
using System;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
String str = "welcome to china";
// 对组统计出每个字符串出现的次数
Dictionary<char, int> dict = new Dictionary<char, int>();
for (int x = 0; x < str.Length;x++ )
{
if (str[x] == ' ')
continue;
//如果dic已经包含了当前循环到的这个键
if (dict.ContainsKey(str[x]))
dict[str[x]]++;
// 这个字符在集合当中是第一次出现
else
dict[str[x]] = 1;
}
// 遍历出数量
foreach(KeyValuePair<char,int> each in dict)
{
Console.WriteLine("字母: {0} 出现了: {1} 次", each.Key, each.Value);
}
Console.ReadKey();
}
}
}