详解c# 数组(Array)

数组是一个存储相同类型元素的固定大小的顺序集合。数组是用来存储数据的集合,通常认为数组是一个同一类型变量的集合。

声明数组变量并不是声明 number0、number1、...、number99 一个个单独的变量,而是声明一个就像 numbers 这样的变量,然后使用 numbers[0]、numbers[1]、...、numbers[99] 来表示一个个单独的变量。数组中某个指定的元素是通过索引来访问的。

所有的数组都是由连续的内存位置组成的。最低的地址对应第一个元素,最高的地址对应最后一个元素。

声明数组

在 C# 中声明一个数组,您可以使用下面的语法:

datatype[] arrayName;

其中,

  • datatype 用于指定被存储在数组中的元素的类型。
  • [ ] 指定数组的秩(维度)。秩指定数组的大小。
  • arrayName 指定数组的名称。

例如:

double[] balance;

初始化数组

声明一个数组不会在内存中初始化数组。当初始化数组变量时,您可以赋值给数组。

数组是一个引用类型,所以您需要使用 new 关键字来创建数组的实例。

例如:

double[] balance = new double[10];

赋值给数组

您可以通过使用索引号赋值给一个单独的数组元素,比如:

double[] balance = new double[10];
balance[0] = 4500.0;

您可以在声明数组的同时给数组赋值,比如:

double[] balance = { 2340.0, 4523.69, 3421.0};

您也可以创建并初始化一个数组,比如:

int [] marks = new int[5] { 99, 98, 92, 97, 95};

在上述情况下,你也可以省略数组的大小,比如:

int [] marks = new int[] { 99, 98, 92, 97, 95};

您也可以赋值一个数组变量到另一个目标数组变量中。在这种情况下,目标和源会指向相同的内存位置:

int [] marks = new int[] { 99, 98, 92, 97, 95};
int[] score = marks;

当您创建一个数组时,C# 编译器会根据数组类型隐式初始化每个数组元素为一个默认值。例如,int 数组的所有元素都会被初始化为 0。

访问数组元素

元素是通过带索引的数组名称来访问的。这是通过把元素的索引放置在数组名称后的方括号中来实现的。例如:

double salary = balance[9];

下面是一个实例,使用上面提到的三个概念,即声明、赋值、访问数组:

using System;
namespace ArrayApplication
{
  class MyArray
  {
   static void Main(string[] args)
   {
     int [] n = new int[10]; /* n 是一个带有 10 个整数的数组 */
     int i,j;

     /* 初始化数组 n 中的元素 */
     for ( i = 0; i < 10; i++ )
     {
      n[ i ] = i + 100;
     }

     /* 输出每个数组元素的值 */
     for (j = 0; j < 10; j++ )
     {
      Console.WriteLine("Element[{0}] = {1}", j, n[j]);
     }
     Console.ReadKey();
   }
  }
}

当上面的代码被编译和执行时,它会产生下列结果:

Element[0] = 100
Element[1] = 101
Element[2] = 102
Element[3] = 103
Element[4] = 104
Element[5] = 105
Element[6] = 106
Element[7] = 107
Element[8] = 108
Element[9] = 109

使用 foreach 循环

在前面的实例中,我们使用一个 for 循环来访问每个数组元素。您也可以使用一个 foreach 语句来遍历数组。

using System;

namespace ArrayApplication
{
  class MyArray
  {
   static void Main(string[] args)
   {
     int [] n = new int[10]; /* n 是一个带有 10 个整数的数组 */

     /* 初始化数组 n 中的元素 */
     for ( int i = 0; i < 10; i++ )
     {
      n[i] = i + 100;
     }

     /* 输出每个数组元素的值 */
     foreach (int j in n )
     {
      int i = j-100;
      Console.WriteLine("Element[{0}] = {1}", i, j);
     }
     Console.ReadKey();
   }
  }
}

当上面的代码被编译和执行时,它会产生下列结果:

Element[0] = 100
Element[1] = 101
Element[2] = 102
Element[3] = 103
Element[4] = 104
Element[5] = 105
Element[6] = 106
Element[7] = 107
Element[8] = 108
Element[9] = 109

C# 数组细节

在 C# 中,数组是非常重要的,且需要了解更多的细节。下面列出了 C# 程序员必须清楚的一些与数组相关的重要概念:

概念 描述
多维数组 C# 支持多维数组。多维数组最简单的形式是二维数组。
交错数组 C# 支持交错数组,即数组的数组。
传递数组给函数 您可以通过指定不带索引的数组名称来给函数传递一个指向数组的指针。
参数数组 这通常用于传递未知数量的参数给函数。
Array 类 在 System 命名空间中定义,是所有数组的基类,并提供了各种用于数组的属性和方法。

以上就是详解c# 数组(Array)的详细内容,更多关于c# 数组(Array)的资料请关注我们其它相关文章!

(0)

相关推荐

  • C#中数组、ArrayList和List三者的区别详解

    在C#中数组,ArrayList,List都能够存储一组对象,那么这三者到底有什么样的区别呢. 数组 数组在C#中最早出现的.在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单. //数组 string[] s=new string[2]; //赋值 s[0]="a"; s[1]="b"; //修改 s[1]="a1"; 但是数组存在一些不足的地方.在数组的两个数据间插入数据是很麻烦的,而且在声明数组的时候必须指定数组的长度

  • C# 数组中的 indexOf 方法及使用

    具体代码如下所示: var array=['REG','2018','2018']; array.indexOf('REG') // 0 array.indexOf('R') // -1 array.indexOf('2018′) // 1 array.indexOf(2018) // -1 arr.indexOf('orange') 输出 0 因为 'orange' 是数组的第 0 个元素,匹配到并返回下标. arr.indexOf('o') 输出 -1 因为此方法不会在每一个元素的基础上再次

  • 详解C#中一维数组的插入

    一维数组的插入: 实现效果:在1 2 3 后面插入4 using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Array { class Program { static void Main(string[] args) { int[] array =

  • C#中数组、ArrayList、List、Dictionary的用法与区别浅析(存取数据)

    前言 在工作中经常遇到C#数组.ArrayList.List.Dictionary存取数据,但是该选择哪种类型进行存储数据,对于初学者的我一直不知道该怎么取舍.于是抽空好好看了下他们的用法和比较,在这里总结下来,后面有需要改进的再更新. 初始化 数组: int[] buff = new int[6]; ArrayList: ArrayList buff = new ArrayList(); List: List<int> buff = new List<int>(); Dictio

  • C#中数组、ArrayList和List三者的区别详解及实例

    在C#中数组,ArrayList,List都能够存储一组对象,那么这三者到底有什么样的区别呢. 数组 数组在C#中最早出现的.在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单. //数组 string[] s=new string[2]; //赋值 s[0]="a"; s[1]="b"; //修改 s[1]="a1"; 但是数组存在一些不足的地方.在数组的两个数据间插入数据是很麻烦的,而且在声明数组的时候必须指定数组的长度

  • C#实现的二维数组排序算法示例

    本文实例讲述了C#实现的二维数组排序算法.分享给大家供大家参考,具体如下: class Order { /// <summary> /// 对二维数组排序 /// </summary> /// <param name="values">排序的二维数组</param> /// <param name="orderColumnsIndexs">排序根据的列的索引号数组</param> /// <

  • C# 删除数组内的某个值、一组值方法详解

    最近优化了一个权限校验的功能,之前每次其他系统在获取各自系统的权限配置时,sso都去找到本地对应的权限文件读取解析一次. 这种设计虽然可以实现功能,但是这种反复去读取的策略并不经济,尤其在高并发的情况下更可能会成为性能瓶颈. 于是我对这块业务进行了优化,而在优化的过程中针对如何去除数组内的某些参数试验了一些写法,下面记录我认为比较优雅的写法. 首先讲下场景,设计多系统的权限统一由sso控制,那么每次用户登录其他系统后需要向sso请求"用户在该系统已有的权限"或"该用户当前是否

  • 详解c# 数组(Array)

    数组是一个存储相同类型元素的固定大小的顺序集合.数组是用来存储数据的集合,通常认为数组是一个同一类型变量的集合. 声明数组变量并不是声明 number0.number1.....number99 一个个单独的变量,而是声明一个就像 numbers 这样的变量,然后使用 numbers[0].numbers[1].....numbers[99] 来表示一个个单独的变量.数组中某个指定的元素是通过索引来访问的. 所有的数组都是由连续的内存位置组成的.最低的地址对应第一个元素,最高的地址对应最后一个元

  • 详解JS数组Reduce()方法详解及高级技巧

    基本概念 reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为一个值. reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce 的数组. 语法: arr.reduce(callback,[initialValue]) callback (执行数组中每个值的函数,包含四个参数) previousValue (上

  • 详解JavaScript之Array.reduce源码解读

    前言 reduce(...)方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值(累计作用) 此方法接受两个参数:callback(...)(必选).initialValue(可选). callback(...)接受4个参数:Accumulator (acc) (累计器).Current Value (cur) (当前值).Current Index (idx) (当前索引).Source Array (src) (源数组). 注意点: 1.callb

  • 详解ES6数组方法find()、findIndex()的总结

    本文主要讲解ES6数组方法find()与findIndex(),关于JS的更多数组方法,可参考以下: ①JavaScript 内置对象之-Array ②ES5新增数组方法(例:map().indexOf().filter()等) ③ES6新增字符串扩张方法includes().startsWith().endsWith() 1. find() 该方法主要应用于查找第一个符合条件的数组元素,即返回通过测试(函数内判断)的数组的第一个元素的值. 它的参数是一个回调函数,为数组中的每个元素都调用一次函

  • 详解python数组中的符号...与:符号的不同之处

    不知道大家有没有见过在python数组中使用...符号,因为前段时间读别人代码的时候遇到了这个符号立刻就云里雾里,于是这里特此记录一下.先来看一段代码: import numpy as np x = np.array([[1, 3], [5, 6], [8, 10]]) print("使用'...'符号的结果为:") print(x[..., 0]) print("使用':'符号的结果为:") print(x[:, 0]) """ 使用

  • 详解C++数组和数组名问题(指针、解引用)

    目录 一.指针 1.1 指针变量和普通变量的区别 1.2 为什么需要指针 1.3 指针使用三部曲 二.整形.浮点型数组 2.1 数组名其实是特殊的指针 2.2 理解复杂的数组的声明 2.3 数组名a.数组名取地址&a.数组首元素地址&a[0].指向数组首元素的指针*p 2.4 对数组名以及取值符&的理解 三.字符数组数组名 一.指针 1.1 指针变量和普通变量的区别 指针:指针的实质就是个变量,它跟普通变量没有任何本质区别.指针完整的应该叫指针变量,简称为指针. 是指向的意思.指针

  • 详解c#中Array,ArrayList与List<T>的区别、共性与相互转换

    目录 Array,ArrayList and List<T> Array 一维数组 定义 初始化赋值 多维数组 定义 初始化赋值 元素赋值和获取元素 交错数组 定义 初始化赋值 获取元素和单个赋值 方法和属性 改 查 获取长度 Array.ConvertAll() 数据类型转换 切片 获取单个元素和赋值 Array.ForEach 循环 ArrayList 定义 初始化赋值 循环 方法和属性 List<T> 定义 初始化 循环 方法和属性 属性 长度 属性 取值 增 查 删 改 切

  • 详解VUE 数组更新

    1.数据方法分类: (1)原数组改变 push  pop  unshift  shift  reverse  sort  splice (2)原数组未变,生成新数组 slice  concat  filter 对于使原数组变化的方法,可以直接更新视图. 对于原数组未变的方法,可以使用新数组替换原来的数组,以使视图发生变化. 示例代码: <!DOCTYPE html> <html lang="zh"> <head> <meta charset=&

  • 详解Java数组的四种拷贝方式

    目录 深拷贝与浅拷贝的区别 1.for循环进行拷贝 拷贝数值类型 拷贝引用类型 2.copyof/copyOfRange 拷贝数值类型 拷贝引用类型 3.arraycopy 拷贝数值类型 拷贝引用类型 4.clone 拷贝数值类型 拷贝引用类型 5.总结 深拷贝与浅拷贝的区别 假设现在有原数组A以及拷贝后的数组B,若是改变A中的某一个值,B数组随之相应的发生变化的拷贝方式称为浅拷贝,反之B数组不受影响,则称为深拷贝:简单总结一下两者的概念: 深拷贝:拷贝后,修改原数组,不会影响到新数组: 浅拷贝

  • Jquery遍历筛选数组的几种方法和遍历解析json对象,Map()方法详解以及数组中查询某值是否存在

    1.jquery grep()筛选遍历数组(可以得到反转的数组) // 1.jquery grep()筛选遍历数组(可以得到反转的数组) var array = [1,5,9,3,12,4,48,98,4,75,2,10,11]; var filterArray = $.grep(array,(currentValue) => { return currentValue > 10; }); console.log(`${filterArray}---${filterArray.length}`

随机推荐