Array:一组数据的有序集合

2025必备:C#上位机自动更新方案,支持断点续传与版本回滚(附完整源码) 摘要:工业上位机自动更新方案解析 本文针对工业现场上位机更新效率低下、风险高的问题,提出了一套完整的自动更新解决方案。该方案包含四个核心模块:版本检测(后台比对版本)、断点下载(支持网络中断续传)、安装更新(自动备份旧版本)和版本回滚(更新失败快速恢复)。通过独立更新工具与主程序解耦的设计,实现了"不影响生产+有退路"的工业级更新要求。方案基于.NET Framework开发,采用HTTP协议通信,包含详细的代码实现和工业场景适配说明,解决了U盘更新效率低、网络不稳定导致下载失败、更新后 阅读详情

数组是一种数据结构,它包含若干相同类型的变量。数组的定义是:在内存中连续开辟的空间,该空间中存储着一组相同数据类型的值。

数组具有以下属性:

数组可以是一维、多维或交错的。

数值数组元素的默认值设置为零,而引用元素的默认值设置为 null。

交错数组是数组的数组,因此,它的元素是引用类型,初始化为 null。

数组的索引从零开始:具有 n 个元素的数组的索引是从 0 到 n-1。

数组元素可以是任何类型,包括数组类型。

数组的声明是使用“[]”对数据类型修饰,并在声明的同时,告诉编译器,我们需要在内存中开辟的空间可以存储多少个值。数组中的值,我们称为数组的元素。

int[] iarr=new int[6];

上述就是一个整型数组的声明。int[]告诉编译器,我们声明一个整数数组,该数组中只能存储整型值。iarr是变量名称。new int[6]就是告诉编译器,我们需要在内存中开辟的空间能存储6个整型值。

数组的大小一旦被定义后,就不可以再被更改。同时编译器为数组中的每一个元素依次配给一个标记,该标记叫下标。你可以想象下酒店的情况,在一层楼上有20个房间,每个房间都有一个门牌号,房间一旦完成隔离就不可以再更改了,除非这层楼全面重新设计布局。

数组的下标是从0开始分配的,这个和我们平常的生活有所不同,我们的门牌号大多都是1开始计数,初学者必须要习惯C#喜欢从0开始计数的怪异脾气。所以下标的最大值总要比数组中元素的总数小1。

对数组中具体的元素的访问,我们必须通过下标实现:

static void Main(string[] args)

{

int[] iarr = new int[6];

iarr[0] = 2;

iarr[1] = 23;

iarr[2] = 4;

iarr[3] = 2;

iarr[4] = 7;

iarr[5] = 10;

System.Console.WriteLine(iarr[4]); //输出下标为4的元素的值

}

运行的结果如图3.1.1。

clip_image002

图3.1.1 显示数组中指定的元素值

我们也可以在声明的时候为数组的每一个元素赋值,如果使用这种模式,就不必再显示的描述元素的个数,编译器能推测出元素的个数。

static void Main(string[] args)

{

int[] iarr = new int[] { 2, 23, 4, 2, 7, 10 };

System.Console.WriteLine(iarr[4]); //输出下标为4的元素的值

}

数组是连续分配的空间,下标的分配也是连续的,从上述代码我们可以发现使用迭代循环是访问数组的好方法。

static void Main(string[] args)

{

int[] iarr = new int[] { 2, 23, 4, 2, 7, 10 };

for (int i = 0; i <= iarr.Length - 1; i++)

{

System.Console.WriteLine(iarr[i]);

}

}

Length是数组的属性,该属性能告诉我们当前数组声明的元素个数。上述代码的输出结果如图3.1.2。

clip_image004

图3.1.2遍历数据中的每一个元素

虽然说,数组的定义是在内存中连续分配的空间,但是在 C# 中,数组实际上是对象,而不只是像 C 和 C++ 中那样的可寻址连续内存区域。Array 是所有数组类型的抽象基类型,可以使用 Array 具有的属性以及其他类成员。比如使用Array数组可以非常方便的对数组类型的值进行排序。

static void Main(string[] args)

{

int[] iarr = new int[6];

iarr[0] = 2;

iarr[1] = 23;

iarr[2] = 4;

iarr[3] = 2;

iarr[4] = 7;

iarr[5] = 10;

Array.Sort(iarr); //升序排序

for (int i = 0; i <= iarr.Length - 1; i++)

{

System.Console.WriteLine(iarr[i]);

}

}

排序后的输出结果如图3.1.3。

clip_image006

图3.1.3 Sort结果

C#没有提供降序的排序方法,不过呢,C#提供了一种方式将数组中的值反转它们的顺序。

static void Main(string[] args)

{

int[] iarr = new int[6];

iarr[0] = 2;

iarr[1] = 23;

iarr[2] = 4;

iarr[3] = 2;

iarr[4] = 7;

iarr[5] = 10;

Array.Reverse(iarr); //反转数组中元素的顺序

for (int i = 0; i <= iarr.Length - 1; i++)

{

System.Console.WriteLine(iarr[i]);

}

}

上述代码的结果如图3.1.4。

clip_image008

图3.1.4 Reverse结果

可以观察Sort和Reverse的结果。如果你有足够的联想力的话,也许你会想到以下的代码来解决降序的排序方案:

static void Main(string[] args)

{

int[] iarr = new int[6];

iarr[0] = 2;

iarr[1] = 23;

iarr[2] = 4;

iarr[3] = 2;

iarr[4] = 7;

iarr[5] = 10;

Array.Sort(iarr); //升序排序

Array.Reverse(iarr); //反转数组中元素的顺序

for (int i = 0; i <= iarr.Length - 1; i++)

{

System.Console.WriteLine(iarr[i]);

}

}

以下就是数组中元素降序排序的结果,如图3.1.5所示。

clip_image010

图3.1.5 降序排序结果

如果我们需要了解某一个值是否在数组的一系列元素中存在,我们不必遍历数组中的每一个元素,C#的数组类提供了IndexOf方法,该方法返回指定的元素值在数组中第一次出现的下标位置,如果该值不存在,则返回-1。下面的代码描述了如何使用IndexOf方法查找数组中元素的值。

static void Main(string[] args)

{

int[] iarr = new int[6];

iarr[0] = 2;

iarr[1] = 23;

iarr[2] = 4;

iarr[3] = 2;

iarr[4] = 7;

iarr[5] = 10;

System.Console.WriteLine(Array.IndexOf(iarr, 7));

System.Console.WriteLine(Array.IndexOf(iarr, 20));

}

得到的结果如图3.1.6。

clip_image012

图3.1.6 IndesOf结果

如果我们使用目前的所有知识来模拟IndexOf的方法,大致的代码如下:

static void Main(string[] args)

{

int[] iarr = new int[6];

iarr[0] = 2;

iarr[1] = 23;

iarr[2] = 4;

iarr[3] = 2;

iarr[4] = 7;

iarr[5] = 10;

System.Console.WriteLine(MyIndexOf(iarr,7));

System.Console.WriteLine(MyIndexOf(iarr,20));

}

public static int MyIndexOf(int[] iarr, int value)

{

for (int i = 0; i <= iarr.Length - 1; i++)

{

if (iarr[i] == value)

{

return i;

}

}

return -1;

}

我们自己编写的MyIndexOf方法的执行模式的效果和Array的IndexOf方法是一致的。当然我们可以编写LastIndexOf方法,代码的实现如下:

public static int MyLastIndexOf(int[] iarr, int value)

{

int index = -1;

for (int i = 0; i <= iarr.Length - 1; i++)

{

if (iarr[i] == value)

{

index = i; ;

}

}

return index; ;

}

如果可以的话,你还可以编写的函数看看自己是否能灵活运用。

public static int MyIndexOf(int[] iarr, int value, int start, int end)

{

end = end < iarr.Length ? end : iarr.Length;

for (int i = start; i < end; i++)

{

if (iarr[i] == value)

{

return i;

}

}

return -1;

}

初学者注意

使用自己的编程知识,模拟.NET Framework提供的方法,是一种很有效的学习方法。

ofd转pdf报错:org.ofdrw.reader.ZipUtil.unZipFileByApacheCommonCompress【已解决】 ofd转pdf报错:java.lang.NoClassDefFoundError:org/apache/commons/io/function/IOIterator at org.ofdrw.reader.ZipUtil.unZipFileByApacheCommonCompress,java.lang.NoSuchMethodError:org.apache.commons.compress.archivers.zip.ZipArchiveInputStream.getNextEntry() 阅读详情

相关推荐

路径规划:D*Lite寻路算法详解

D*Lite详解目录

mkr67n的博客 2万+

JavaScript数组学习

关于JavaScript的数组学习

Tommy_WXF的博客 657

CoDeSys系列-3、Windows运行时软PLC主站和p-net从站IO设备组网测试

前面CODESY下载安装并熟悉了,p-net搭建从站也已经跑在虚拟机树莓派上了,我们只需要快速搭建一个profinet主站来和从站进行交互即可,这里我们直接用Windows下带的软PLC搭建profinet主站并和p-net的demo从站程序进行IO交互。评估是否进行Windows下的运行时PLC前先看一下注意事项,Windows下安装配置会需要修改boot及防火墙等,可能会影响Windows电脑的正常使用,所以创建项目时的设备可以选择非RTE的。

逍遥游的博客 7314

Java数组(Array)

Java数组(Array) 概述 ​ 数组(Array)是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。 这些有序排列的同类数据元素的集合称为数组。 数组的定义 1、基本概念 数组名 数组大小 数组类型 2、特点 数组是按序排列的 数组属于引用数据类型的变量。数组中的元

TheAnnoyingDog的博客 4560

多元相关性分析_PAST:最简便易用的统计学分析软件教程目录

欢迎来到PAST的世界!本教程并不是将PAST的所有功能均进行详细介绍,而只是挑选与生物、医学、微生物研究相关的统计学分析内容进行讲述。根据PAST内各项分析的标签分类,将该教程具体设置如下:PAST软件介绍PAST的基本信息数据的输入和修改数据的转换和标准化图像绘制 (Plot标签)点线图和直方图散点图条形图和箱须图饼图堆叠条形图三元相图气泡图单变量统计学分析 (Univariate标...

weixin_39605706的博客 3156

秦时明月6.2魔改版_从零到一部署指南_含安卓客户端配置与GM后台直通

本文详细介绍了秦时明月6.2魔改版的从零到一部署指南,包括环境准备、服务端安装、安卓客户端配置以及GM后台直通等关键步骤。特别针对安卓客户端配置和GM工具使用提供了实用技巧,帮助用户快速搭建并优化游戏服务器,确保稳定运行。

weixin_42522964的博客 317

Java之数组(Array)

数据类型 [] 数组名比如:int [] array。

fly的博客 2637

华硕ROG玩家国度安装Ubuntu双系统避坑指南:安全启动密钥那些事儿

本文详细解析了在华硕ROG玩家国度设备上安装Ubuntu双系统时,如何正确处理BIOS中的安全启动(Secure Boot)与密钥管理,避免常见的引导失败和Windows系统无法启动问题。指南提供了从数据备份、启动盘制作到BIOS精细设置(如将OS Type改为Other OS而非简单关闭Secure Boot)以及分区规划的完整流程,确保两个系统都能稳定共存。

weixin_29219189的博客 754

Java数组(有序数组和无序数组)之增删改查操作

数组:数组存储具有相同数据结构的元素集合,一维数组占有一块内存空间,数组一旦占用存储空间(连续),其地址和容量就是确定的,不能改变。 下面是详细的代码和实现结果: package array; import java.util.ArrayList; import java.util.List; public class array { public static List&lt;...

IBLiplus的博客 1752

数据库和BI工程师面试题

 一.数据库 1.Oracle数据库,视图与表的区别?普通视图与物化视图的区别?物化视图的作用? 2.Oracle数据库,有哪几类索引,分别有什么特点? 3.Union与Union All的区别? 4.对游标的理解?游标的分类?使用方法? 5.如何查找和删除表中的重复数据?给出方法或SQL。 6.不借助第三方工具,怎么查看SQL的执行计划? 7.创建索引有哪些需要注意的要点?

web_go_run的专栏 1万+

Altium Designer(AD)仿真实验操作指南

1:运行仿真2:设置仿真3:放置电源模块4:放置器件模块5:探针。

XU157303764的博客 8902

判断一个数组是否有序

        一般来说,判断一个数组或序列是正序,倒序还是乱序,需要我们将这个数组完整的遍历一遍后才能得出答案,它不像折半查找那样只处理少量的数据便能得出结论,因为一段包含成千上万个元素的有序序列,哪怕将其中两个元素的位置调换都能将这个序列变成乱序序列.如下面这段序列,只是数字8和9调换,就变成了乱序的. [0, 1, 2, 3, 4, 5, 6, 7, 9, 8, 10, 11, 12, ...

ZK教皇的博客 2万+

ENS160传感器原理图设计,已量产(空气质量传感器)

ENS160 是一款集成式数字空气质量传感器,核心优势源于 “MEMS 传感元件 + 内置微处理器” 的架构。

不脱发的程序猿 572

Redis php 批量写入有序集合(sorted set)

/** * 调用redis的方法批量写入有序集合 * 等同于$redis->zAdd('key_name1',100,1,100,2,100,3,100,4,100,5); */ $redis = new Redis(); $redis->connect('127.0.0.1',6379); $time_array = array('key_name1',100,1,100,2...

༺墨༒眉༻ 1632

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

javascript/js中Array、Set、Map数据结构特性及用法

本文温习前端开发中常见的3种数据结构:数组Array、有序集合Set、有序映射Map,并分别介绍其特性、用法示例。

qq_43521551的博客 1984

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

不想用Object和Array存储数据,你还有Set和Map

全文共4271字,预计学习时长11分钟 图源:unsplash 许多年来,程序员们一直使用Object和Array来存储数据,这种趋势不仅仅局限于JavaScript。除了这两个选项外,没有其他选择来存储多个值和处理数据结构。然而,在使用Object和Array时有几个限制,例如: · Array可以存储重复的元素。 · 没有像Array那样找到Object长度的方法。 · 只有字符串可以存储在Object中,不记插入顺序。 · 开发人员必须根据用例选择数组或对象。 · 像Lod..

读芯术的博客 3945

C++ array使用方法详细介绍

文章目录

终曲 5万+

redis有序集合中是否存在某个成员

redis命令使用参考网页:http://redis.cn/commands.html有序集合中,redis没有命令直接判断有序集合中是否存在某个成员,自行通过代码实现,示例代码如下:#include <stdio.h> #include <stdlib.h> #include <string.h>#include <hiredis.h>/* ----------------------------

秋叶原 && Mike || 麦克 1万+

js的Map、Object、Array类型

最近写JS用到了Map和Object,这两个数据类型存数据后有点相似,都是一个对象里存个若干key-value对。 map长这个样子: Object长这个样子: 但是用起来还是很不一样的。 所以做个区分总结。 Map类型: //创建对象 var map=new Map(); //存入数据 map.set('age','15'); //两种方法最好不要混用,同一个Map对象最好始终用一个存数据方法 map["a2"]="bbb"; //取数据 map.get('age'); // 取方法和

qq_41984887的博客 737

Java中Array、List、ArrayList的区别

Array Array(数组)是基于索引(index)的数据结构,它使用索引在数组中搜索和读取数据是很快的。 Array获取数据的时间复杂度是O(1),但是要删除数据却是开销很大,因为这需要重排数组中的所有数据。 List List—是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式,它继承Collection。 List是一个接口,不能写成如下: List&lt...

wiidi的博客 3万+

object htmlinputelement 怎么解决_不想用Object和Array存储数据,你还有Set和Map

全文共4271字,预计学习时长11分钟图源:unsplash许多年来,程序员们一直使用Object和Array来存储数据,这种趋势不仅仅局限于JavaScript。除了这两个选项外,没有其他选择来存储多个值和处理数据结构。然而,在使用Object和Array时有几个限制,例如:· Array可以存储重复的元素。· 没有像Array那样找到Object长度的方法。· 只有字符串可以存储在Object...

weixin_39731845的博客 550

GBase 8s数据库ADD ARRAY子句分析

南大通用GBase 8s数据库ARRAY 类型的安全标签组件是超过 64 个元素的有序集合。声明数组元素的顺序很重要,因为它定义了数据敏感性的降序,每个连续的元素在数据敏感性上都低于前面的元素。数组的标签元素集及其逗号( , )分隔符必须放在一对括号( [ ... ])内。相同的新元素不能在同一 ADD ARRAY 子句中声明多次。

weixin_47390342的博客 297

Gbase8s数据库ADD ARRAY 子句

然而,如果 ADD ARRAY 子句的 BEFORE 或 AFTER 关键字指定了之前未定义的数组元素(无论是在创建数组组件时,还是在先前的 ALTER SECURITY LABEL COMPONENT 语句中),ALTER SECURITY LABEL COMPONENT 语句都会失败并显示错误。以下示例定义了一个 ARRAY 类型的安全标签构件 aquilae ,它是五个元件的顺序集, imperator在数据敏感度中是最高的,最低的是 asinus。

kelei2010的博客 166

12.有序集合

有序集合 Vector集合 ​ jdk1.0版本 线程安全 效率低 Vector<String> vs = new Vector<String>(); vs.add("张三"); vs.add("李四"); vs.add(0, "王五"); for(String s : vs) { System.out.print(s+" "); } System.out.println(); Iterator<String> it = vs.iterator(); whil

wy1511861159的博客 693
上一篇: 从一个帖子看部分大学生的学习心态
下一篇: Stack和Queue:后进先出和先进先出
王豫翔
博客等级 码龄17年 730粉丝 211原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值