数组用顺序列表来存储多个相同类型的值。相同的值可以多次出现在数组中的不同位置。
Swift 数组在存储值的时候,一定要指明类型。它们不同于Objective-C的NSArray和NSMutableArray类能够存储任何种类的对象,而且不用提供任何关于它们返回对象性质的相关信息。在Swift中,特定数组能够存储值的类型是明确的,要么通过一个明确的类型注解,要么通过类型推断,并且不必是一个类类型。例如,如果你创建一个Int类型的数组,你不能插入任何Int类型之外的值进那个数组。Swift数组是类型安全的,并且总是明确它们所包含值的类型。
数组类型声明的简便语法
数组类型声明的完整写法为Array<SomeType>,这里SomeType是数组允许存储的类型。你也可以用简便写法SomeType[] 来定义数组类型,这两种写法功能是完全相同的,更倾向于简便写法,本书之后章节中都是使用的这种写法。
数组值
你可以用数组值来初始化一个数组,数组值是书写一个或多个值构成的数组集合的快捷方式。使用方括号包含一系列的值,中间用逗号隔开,就可以编写一个数组值。
下面的例子创建了一个数组叫做shoppingList 来存储String值:
shoppingList变量被声明为“一个String 类型数组”,写为String[].
因为这个特定数组已经指定类型为String,所以它只能允许存储String值。这里,shoppingList数组用由两个字符串值("Eggs"和"Milk")构成的数组值来初始化的。
注意:shoppingList数组被声明为一个变量(用var)而不是一个常量(用let)因为在下面例子中更多条目会被加到shopping列表中。
在这种例子下,数组值包含两个字符串值,除此之外没有别的东西了。这个符合shoppingList变量声明的类型(只能包含String值的数组),所以用包含两个元素的数组值来给shoppingList初始化的方式是允许的。
收益与Swift的类型推断,如果你使用相同类型值的数组值来初始化数组的话,就不用明确的声明类型了。shoppingList可以使用一种更简便的方式来初始化:
因为在数组值中的所有值是相同类型,Swift能够推断出shoppingList变量的类型是String[]。
访问和修改一个数组
通过访问它的方法和属性,或者=使用下标语法来访问和修改一个数组。
为了获取一个数组中元素的数目,访问它的只读属性count:
可以使用isEmpty属性来检查一下count属性是否等于0:
通过调用数组的append方法,可以添加一个新的元素到数组的末端:
此外,可以用加号赋值操作符(+=)添加一个新的条目到数组的末端:
你也可以使用加号赋值符操作符(+=)将类型兼容的数组追到后面去:
通过下标语法可以从数组取出一个值,数组名紧跟着中括号,里面加上下标:
注意在数组中的第一个元素的下标是0而不是1.Swift中的数组总是从0开始的。
你可以使用下标语法来改变某个位置上的值:
你也可以使用下标语法来改变某个范围内的值,即使替换值的长度跟你要替换的长度不一样。下面的例子用"Bananas"和"Apple"替换了"Chocolate Spread","Cheese",和"Butter"
注意:你不能使用下标语法来追加一个新的条目到数组的末端。如果你想要使用下标语法来获取或设置一个超出数组下标范围的值,将会引发一个运行时间错误。然而,通过与数组的count属性进行比较,你可以在使用它之前检查这个索引是否有效,。除了当count是0(代表数组是空的)以外,在数组中最大的有效索引是count-1,因为数组索引是从0开始的。
插入一个元素到数组中指定的位置,可以调用数组的insert(atIndex:)方法:
调用这个insert方法,将插入了一个值为Maple Srup在购物列表的最前端,即索引为0的位置:
类似的,使用removeAtIndex方法来移除一个数组中的某个元素。这个方法将指定位置处的元素移除掉并且返回移除的元素(如果你不需要它,你也可以不管返回的值):
当一个元素从数组中移除之后,那个缺口就会关上,所以索引0对应的值再一次等于“Six eggs”:
如果你想要从数组中移除最后的元素,使用removeLast方法而不是removeAtIndex方法,可以避免访问数组的count属性。像removeAtIndex方法一样,removeLast将会返回移除的元素:
遍历一个数组
你可以使用for-in循环遍历一个数组中的所有值:
如果你需要每个元素的索引和它的值,可以使用全局函数enumerate函数来遍历数组。enumerate函数为会根据每个元素生成一个对应的元组(索引,值)。在循环体内,你可以把元组分解成为临时的常量或变量:
更多的关于for-in循环,请看For Loops.
创建和初始化一个数组
你可以使用构造器来创建一个某种类型的空数组(不用设置任何初始值):
注意someInts变量的类型被推断为Int[]类型,因为它是用Int[]构造器初始化的。
另外,如果上下文已经提供了类型信息,比如一个函数参数或者是已声明类型的变量或常量,你可以用一个空数组值来创建一个空数组,写为[](一个空的方括号):
Swift的Array类型提供一个构造器创建一个具有某个大小,值都为某个默认值的数组。在这个构造器中,你可以指定要添加到新数组的元素个数(叫做count)和一个适当类型的默认值(叫做repeatedValue):
感谢类型推断,当使用这个构造器的时候,你不需要指定数组的存储类型,因为它可以从初始值推断:
最后,可以使用加号操作符(+)将两个类型兼容的数组加在一起来创建一个新的数组。新的数组类型是从你加在一起的两个数组类型推断的:
相关推荐
// 访问数组的第一个元素 ``` - 下标索引从0开始计数。 - 数组的长度可以通过 `sizeof()` 运算符来计算,例如: ```c int size = sizeof(arr) / sizeof(arr[0]); ``` 5. **一维数组在内存中的存储**: - ...
例如,可以使用`For`循环逐个赋值,或者直接使用`Array(1, 2, 3, 4, 5)`这样的函数生成一个数组。 数组的输入可以通过`InputBox`函数获取用户输入,适用于少量数据;对于大量数据,可以结合文本框控件和`Split()`、...
需要注意的是,数组的索引号从0开始,因此第一个元素的索引号为0,第二个元素的索引号为1,以此类推。 在C++中,对数组使用超出范围的index是合法的,但是这将产生问题,因为它不会产生编译错误而不易被察觉,但是...
第三节 While 循环 第四章 函数与过程 第一节 函数 第二节 自定义过程 第五章 Pascal的自定义数据类型 第一节 数组与子界类型 第二节 二维数组与枚举类型 第三节 集合类型 第四节 记录类型和文件类型 第五...
num1 = CInt(InputBox("请输入第一个数:")) num2 = CInt(InputBox("请输入第二个数:")) average = (num1 + num2) / 2 MsgBox("两个数的平均值为:" & average) End Sub ``` 在编写VB.NET代码时,要注意遵循...
第一节 C 语言的特点 1 第二节 C 语言的程序结构 2 第三节 C 语言的关键字和标识符 3 第二章 C 语言的基本语法 5 第一节 数据类型 5 2 1 1 整型int 5 2 1 2 浮点型float 6 2 1 3 字符型char 6 2 1 4 指针型 7 2 1 5 ...
这里展示了如何使用 `np.zeros` 创建一个全零的多通道图像数组,并将其中一个通道的所有像素值设为 255。这相当于创建了一个纯色图像。 ### 4. 创建单通道数组 如果只需要处理单通道图像(如灰度图像),可以使用...
在第二节中已解释过,C语言中,在函数体中或在函数外部定义的一维数组名是一个地址常量,其值为数组第一个元素的地址,此地址的基类型就是数组元素的类型。在以上二维数组中,a[0]、a[1]、a[2]都是一维数组名,同样...
"谭浩强程序设计第三版课件第章数组" 本节课主要讲述数组的基本概念、定义、引用和初始化... 访问第一个学生的成绩。 本节课讲述了一维数组的基本概念、定义、引用和初始化,并给出了实例代码来演示一维数组的使用。
第一节 数组 第二节 指针 第三节 结构 第四节 共用体 第五节 枚举 第九章 单片机中断、定时器串行口的C语言编程 第一节 单片机中断系统C语言编程 第二节 定时/计数器及实验 第三节 串行...
在内存中,数组是一个连续的存储单元,数组的下标范围是从0到数组元素个数减1。例如,数组a的存储如下: |MEMORY ADDRESS| | --- | | a[0] | | a[1] | | ... | | a[9] | 数组的引用 在C语言中,数组元素的引用...
本节主要探讨了C语言中的数组,尤其是一维数组的概念、定义、引用以及初始化。 一维数组是数组中最基础的形式,它是一组有序的数据集合,每个数据都有一个唯一的下标来标识。数组名作为整个数组的标识,而数组元素...
例如,数组A可以有多个元素,如A(0)、A(1)、A(2)等,它们都属于同一个数组,但通过下标区分。一维数组在处理数列或列表数据时非常有用。 二维数组则扩展到二维平面,拥有两个下标,可以用于表示表格数据,如成绩表...
这段代码使用了两个for循环,第一个循环用于赋值,第二个循环则按照从大到小的顺序输出数组元素。这样,数组`a[0]`到`a[9]`被赋值为0到9,然后按照逆序打印出来。 总结来说,数组是处理批量数据的强大工具,它简化...
- 使用索引来访问数组元素,如`myArray[0]`将获取第一个元素,`myArray[1]`获取第二个元素,以此类推。 - 索引范围为0到数组长度减1。 5. **遍历数组** - 可以通过for循环遍历数组的所有元素,例如: ``` for ...
` 就定义了一个整型数组 `a`,其名称 `a` 就是一个指向数组首元素的指针。 选择题 [8.1] 若有定义:`int x,*pb;` 则在以下正确的赋值表达式是 `pb=&x`。因为 `&x` 是变量 `x` 的内存地址,所以 `pb` 将存储变量 `x...
第一节 数组创建:使用array函数,将Python下的list转换为ndarray。 第二节 查看操作:使用ndarray对象的重要属性来查看数组的信息。 NumPy的文件IO操作包括: 1.3.1 保存数组 1.3.2 读取 1.3.3 读写csv、txt文件...
- `a`:第一个后缀的索引。 - `b`:第二个后缀的索引。 - **核心步骤**: 1. 检查索引 `a` 和 `b` 的位置关系。 2. 使用预处理数组 `min_lcp` 快速获取两个后缀之间的最长公共前缀。 #### 六、应用场景 后缀...
第一个参数是数据源(即被复制的字符串),第二个参数是从字符串某一处开始复制,第三个参数是要复制字符串的长度(即个数)。最后函数返回一个新的字符串(即是我们指定要复制的字符串内容)。 示例代码: ``` var...