B4X编程语言:B4X数组详解

        B4X数组是可以通过索引选择的数据或对象的集合。它是一种非可视化的数据容器,在B4X中作为变量使用,用于在单个变量下存储多个数据项。数组中的每个数据项称为元素,每个元素都可以通过其位置或索引来访问。

        一、数组的维度

        数组按其维度可划分为单维数组、二维数组和多维数组
        Dim arr(5) As String声明了一个单维数组,共有5个数据元素,数组长度是5。
        Dim arr(5,3) As String声明了一个二维数组,共有15个数据元素,数组长度是5。
        Dim arr(5,3,4) As String声明了一个三维数组,共有60个数据元素,数组长度是5。

        我们可以用下面比喻深入了解不同维度数组的概念:
        单维数组是一条线,线上排列了5个数据元素,其数组长度等于元素数量。
        二维数组是一张纸,上面排列了3行5列元素共15个,其数组长度等于列数5。
        三维数组是一本书,共有3行5列的页4页,元素共60个,其数组长度等于列数5。
        四维数组是一个书架、五维数组是有多个书架的图书室等等以此类推。

        二、动态数组与静态数组

        静态数组是在编译时定义并分配内存空间的数组,其大小在编译时被确定且无法修改。静态数组的大小通常在声明时指定,如:Dim arr(5) As String,arr为静态单维数组,其固定长度为5,最大索引为4,您不能给ar(5)赋值,因为没有ar(5)这个元素。
        动态数组是在运行时创建和销毁的数组,其大小可以根据需要进行调整。动态数组在声明时不指定长度,其长度值可以动态改变。在B4X中仅单维数组可以声明为动态数组,声明后用Array As语句初始化数组。多维数组可以声明为List。

        例如:
        Dim arr() As Int
        arr()= Array As Int (1,2,3)
        想要更改arr()大小,只能使用Array As语句再次初始化。

        三、声明数组

        语法:Private(Public) <变量名>([单维长度[,二维长度,[...]]]) As 数据类型
        声明为局部变量用Private,全局变量用Public或Dim。
        变量名后面的括号中没有逗号,则为单维数组,有一个逗号为二维数组,有两个打逗号为三维数组。
        数据类型是指数组存放的数据的类型,如String、Int、Double、Object等,如果数据非单一类型,而是混合类型,则数据类型必须用Object。

        例如:
        Public LastName(50) As String 一维字符串静态数组,元素总数 50。
        Public Matrix(3, 3) As Double 二维双精度值静态数组,元素总数 9。
        Public Data(3, 5, 10) As Int 三维整数静态数组,元素总数 150。
        Public btn(3) As Object=Array As String(1,"bt1",Button1)  单维混合静态数组
        Public LastName() As String 一维字符串动态数组,元素总数可用Array As 语句改变。

        注意:
        1、数组中每个维度的第一个索引是 0。
        LastName(0), Matrix(0,0), Data(0,0,0)
        2、最后一个索引等于每个维度中的项目数减 1。
        LastName(49), Matrix(2,2), Data(2,4,9)
        3、B4R 只支持一维数组!
        
4、多个数组的声明可以用多行声明,也可以用单行声明,和其它变量声明规则一样。
        例如:
        Public LastName(10) As String
        Public FirstName(10) As String
        Public Address(10) As String
        Public City(10) As String
        或者
        Public LastName(10), FirstName(10), Address(10), City(10) As String
        5、声明数组的一种更通用的方法是使用变量。
        Public NbPers = 10 As Int
        Public LastName(NbPers) As String
        Public FirstName(NbPers) As String
        Public Address(NbPers) As String
        Public City(NbPers) As String
        我们将变量声明为Public NbPers = 10 As Int并将其值设置为 10。
        然后我们用这个变量来声明数组,而不是像以前那样用数字 10 来声明。
        最大的优点是如果在某个时候我们需要更改项目的数量,我们只更改一个值。

        四、访问多维数组变量

        一般使用循环遍历法访问多维数组变量中的各个元素,下面示例显示如何访问三维数组中的所有元素:

        1、访问使用常量定义数组长度的数组:
Public Data(3, 5, 10) As Int
For i = 0 To 2
		For j = 0 To 4
			For k = 0 To 9
				Data(i, j, k) = ...
			Next
		Next
Next
        2、访问使用变量定义数组长度的数组:
Public NbX = 2 As Int
Public NbY = 5 As Int
Public NbZ = 10 As Int
Public Data(NbX, NbY, NbZ) As Int

For i = 0 To NbX - 1
	For j = 0 To NbY - 1
		For k = 0 To NbZ - 1
			Data(i, j, k) = ...
		Next
	Next
Next

        五、关键字Array的用法

        关键字Array用于创建指定类型的单维数组。
        语法为: Array [As type] (list of values)。
        如果省略了类型type,则将创建一个对象数组。
        list是单维数组的元素列表。
        Dim Days() As String = Array As String("Sunday", "Monday", ...)

        Array常用于将固定数量的项添加到控件的待选项列表中。
        Dim combobox1 As ComboBox
        combobox1.Initialize("combobox1")
        combobox1.Items.Clear
        combobox1.Items.AddAll( Array As String("学士","硕士","博士","其他"))
        Root.AddView(combobox1,10,100,120,30)

        六、数组的引用

        两个数组之间是通过数据引用传递数据的,比如:数组2 = 数组1,数组2是通过对数组1的数据引用获得数值的,这个情况下,两个数组中任何一个数组数据发生变化,另一个数组的相应数据也会发生同样的变化。因此,改变一个数组元素的值,另一个数组相应值也会改变。

        例如:
        Dim ar1(3) As Int=Array As Int(1,2,3)
        Dim ar2(3) As Int=ar1
        ar1(0)=10         ' 将数组ar1的第一个值更改为10
        Log(ar2(0))       ' 数组ar2的第一个元素的值也会变为10
        ar2(1)=20         ' 将数组ar2的第二个值更改为20
        Log(ar1(1))       ' 数组ar1的第二个元素的值也会变为20

        要解决这个问题,我们需要将数组ar2初始化并赋值,作为一个新的与ar1无关联的数组使用。如下代码:
        Dim ar1(3) As Int=Array As Int(1,2,3)
        Dim ar2(3) As Int=Array As Int(1,2,3)
        ar1(0)=10           ' 将数组ar1的第一个值更改为10
        Log(ar2(0))         ' 数组ar2的第一个元素的值仍为1
        ar2(1)=20           ' 将数组ar2的第二个值更改为20
        Log(ar1(1))         ' 数组ar1的第二个元素的值仍为2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝色天空上的云朵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值