首页 > 其他分享 >数组基础、多维数组、静态Array

数组基础、多维数组、静态Array

时间:2024-07-27 18:00:54浏览次数:23  
标签:arr 数组 item Student 多维 new Array Name

数组:一组数据。本身是一种类型(引用类型),但它中存储的元素(项)也有数据类型,数组只能用来存储类型相同的强类型的数据,比如班级只能用来存放学生,不能放别的。数组在内存中是按定长连续来存储的,具有相同数据类型的数据元素的有序集合。

 int a = 10;// 一个数据
 bool b = true; // 一个数据

 // int[] 数据类型+[] , 3数组长度,可以明确指定,也可以不指定
 // 没有初始化时,指定长度,有初始化时,长度省略。
 int[] ints = new int[3];
 // 通过索引初始化,索引从0开始,到数组长度-1结束,索引不能越界
 ints[0] = 11;
 ints[1] = 12;
 ints[2] = 13;
 //ints[3] = 14;  // System.IndexOutOfRangeException:“索引超出了数组界限。”

 

 数组一旦创建,数组的长度就会固定。

 string[] strings = new string[] { "abc", "hello", "world" };
 Console.WriteLine(strings.Length);  // 数组一旦创建,长度固定。
 //strings.Length = 4;// Length长度是只读的不能修改

 string[] strings2 = { "abc", "hello", "world" };
 int[] ints2 = { 10, 20, 20 }; // 数组中项不是唯一。

 // C#数组支持数组中存储不同数据类型的元素。如:object[]
 object[] objects = new object[] { 1, 2, 'a', "hello", false, new object() { } };

一维数组,多维数组(2维,3维)

创建数组实例后,其每个元素都有默认值,string 的为空字符串,int 的为 0 ,bool 的为 false,引用类型的为 null;判断数组是几维,就看[]中逗号,0个逗号是一维数组,1个就是二维,依次类推。

一维数组:

// 一维数组
Student[] students2 = {
    new Student(){ Id=1,Name="张三1"},
    new Student(){ Id=2,Name="张三2"},
    new Student(){ Id=3,Name="张三3"},
};

二维数组:不是ArrayList,ArrayList没有多维情况,多维数组指的是Array 静态定义方式类型[,] 名字 = new 类型[行数,列数]

// 二维数组
Student[,] stuTable = new Student[,] {
    {
        new Student(){ Id=11,Name="张三1"},
        new Student(){ Id=12,Name="张三2"},
        new Student(){ Id=13,Name="张三3"},
    },
    {
        new Student(){ Id=21,Name="李四1"},
        new Student(){ Id=22,Name="李四2"},
        new Student(){ Id=23,Name="李四3"},
    },
    {
        new Student(){ Id=31,Name="王五1"},
        new Student(){ Id=32,Name="王五2"},
        new Student(){ Id=33,Name="王五3"},
    }
};

对数组的基本操作(重要):静态Array,动态

static void Add(int x)
{
    // fun===Addd, ()===(int x), { }方法体   =>箭头函数(JS), 拉姆达表达式(理解匿名方法)
    Action fun = () => { };
}

static void Method1(int item)
{
    Console.WriteLine(item);
}
 
// 隐式的初始化(隐式类型化数组)
 var arr = new int[] { 1, 2, 3 };
 // var==int[],编译期间确定数组类型,dynamic运行期间确定类型

 // 追加
 arr = arr.Append(4).ToArray();
 Console.WriteLine(arr[3]);  // 4

 // 循环  for,while,foreach
 for (int i = 0; i < arr.Length; i++)
 {
     Console.WriteLine(arr[i]);
 }

 // 委托:看见委托,传一个方法过去。
 // 参数1:循环的数组 参数2:拉姆达表达式(回调函数)    ForEach数组专门API。
 Array.ForEach(arr, (item) =>
 {
     Console.WriteLine(item);
 });

// Method1回调函数
Array.ForEach(arr, Method1);  // 不能添加小括号

// 删除(和其他对象的删除不太一样,只能修改,数组一旦创建,长度固定)
Array.Clear(arr, 0, 4);  // 把项的值改成默认值
Array.ForEach(arr, Method1);

// 修改(替换某个项,整个数组修改)
arr[0] = 10;  // 通过索引修改,注意影响原数组
Array.ForEach(arr, Method1);

arr = new int[] { 100, 200, 300, 400 }; // 修改地址
Array.ForEach(arr, Method1);
// 插入(C#数组不支持)

// 查询
var filterArr = arr.Where((item) =>
{
    return item > 100;
}).ToArray();

Array.ForEach(filterArr, Method1);

int result = Array.Find(arr, (item) =>
 {
     return item == 200;
 });
Console.WriteLine(result);

Student oneStudent = Array.Find(students2, (item) =>
{
    // item===一个学生对象
    return item.Name.EndsWith("2");
});
Console.WriteLine($"学生Id:{oneStudent.Id},学生姓名:{oneStudent.Name}");

Student[] stus = Array.FindAll(students2, (item) =>
{
    // item===一个学生对象
    return item.Name.EndsWith("张");
});

Array.ForEach(stus, (stu) =>
{
    Console.WriteLine(stu.Name);
});

标签:arr,数组,item,Student,多维,new,Array,Name
From: https://blog.csdn.net/yoyo21ktime/article/details/140721259

相关文章

  • 为什么用 numpy 数组除以 float32 常量比将 numpy 数组转换为 float32 然后除法更快?
    我正在处理一些图像数据,因此图像表示为形状为(1404,1404,3)的numpy数组。图像的类型为np.uint8(它的RGB值从0到255)我想知道这两行代码之间的速度差异:normalized_image=image.astype("float32")/255.0normalized_image=image/np.float32(255)在1......
  • js 一个对象有多层,都是分组对象,最后一层才是数组,怎么拍平这个对象,拍平后的格式是{a.b.
    要将一个嵌套对象拍平为{a.b.c:[]}这种格式,可以使用递归方法遍历对象的每一层,并在最终层级构建平坦的键值对。以下是实现这一功能的示例代码:functionflattenObject(obj,parentKey='',result={}){for(letkeyinobj){constfullKey=parentKey?`${......
  • js 对数组进行任意层、n层分组
    如果分组层数是动态的,即可以是n层,可以使用递归函数来实现。以下是一个示例代码,展示了如何实现动态层数分组:const_=require('lodash');//示例数据letdata=[{category:'A',type:'X',subType:'Alpha',value:1},{category:'A',type:'X&......
  • ArrayMap是何方神圣
    一、概念ArrayMap是一个实现Map接口的数据结构。内部使用2个数组进行存储,一个数组记录键的hash值,一个数组记录键值对,其中键和值可以是任何数据类型。键使用二分法进行排序。  int[]mHashes;  Object[]mArray;mArray中存储键值对,并且键与值是紧挨着存储的。二、......
  • 演示 数据类型 数组名[]=new 数据类型[大小],循环输入5个成绩,保存到double数组,并输出
    importjava.util.Scanner;publicclassexercise13{//编写一个main方法publicstaticvoidmain(String[]args){//演示数据类型数组名[]=new数据类型[大小]//循环输入5个成绩,保存到double数组,并输出//步骤//1.创建一个dou......
  • 如何极其快速地修改多维 numpy 数组的值?
    我正在开发一个项目,涉及跟踪(640,640)网格上的数千个点。跟踪这些点时,我将它们的运动以向量线性数组的格式存储,解释每个点的变化位置采用以下格式:v=[starting_x,starting_y,distance_x,distance_y]我(为了项目的缘故)必须创建一个与上述网格(640,640)大......
  • 【和为 K 的子数组】python刷题记录
    这就到前缀和了。classSolution:defsubarraySum(self,nums:List[int],k:int)->int:#连续不能sortnum=len(nums)i=0j=i+1sm=0ret=0#j可以=是因为后面切片不包括jwhilej<=num:......
  • 深度学习与图像识别学习笔记day2(numpy数组的方法)
    创建numpy数组importnumpyasnpnparray=np.array([iforiinrange(10)])print(nparray)创建数值都为0的数组importnumpyasnpa=np.zeros(10)print(a)得到的结果0都有一个小数点,调用a.dtype创建的向量类型为dtype(‘float64‘)创建整数型a=np.zeros(10,d......
  • es6中对数组的常用操作方法-普通数组
    参考https://www.jianshu.com/p/856f4200d3c0最近,经常操作数组,可是数组中的一些常用操作方法很迷糊,看了上面一篇文章之后,茅塞顿开。于是自己按照上面文章的用法,自己全部从头到尾写了一遍,分为普通的数组以及对象数组的操作。//定义数组constarr=[1,2,3,4,5]......
  • es6中对数组的常用操作方法-对象数组
    //定义对象数组constarrayObject=[{name:'name1',title:'title1'},{name:'name2',title:'title2'},{name:'name3',title:'title3'}];//数组对象......