26
2019.2

数组函数

作者: POPASP
POP_MVC.Arr(1.5版本以前为POP_MVC.Array,为了与函数Array不重名,故改为Arr)的数组处理函数,主要有五大类:修改、取片段、查找、迭代、排序、其他 ## 修改函数 修改函数直接修改传入的数组,这点须注意。 ### Push 函数 **功能** 向数组尾部添加一个元素 **参数说明** Sub Push( byref arr,byval item ) arr 参数,待操作数组,如果arr不是数组,则将其转化为数组 item 参数,待操作元素 **返回值** 无返回值,直接将元素添加到数组上 **举例1** ```brush:vb dim arr POP_MVC.Arr.Push arr,1 POP_MVC.Arr.Push arr,"a" POP_MVC.Arr.Push arr,2 POP_MVC.Arr.Push arr,"b" var_export arr '[1, "a", 2, "b"] ``` **举例2** ```brush:vb dim arr arr = "初始值" POP_MVC.Arr.Push arr,"c" POP_MVC.Arr.Push arr,"d" var_export arr '["初始值", "c", "d"] ``` ### Unshift 函数 **功能** 向数组头部添加一个元素 **参数说明** Sub Unshift( byref arr,byval item ) arr 参数,待操作数组,如果arr不是数组,则将其转化为数组 item 参数,待操作元素 **返回值** 无返回值,直接将元素添加到数组上 **举例1** ```brush:vb dim arr POP_MVC.Arr.Unshift arr,1 POP_MVC.Arr.Unshift arr,"a" POP_MVC.Arr.Unshift arr,2 POP_MVC.Arr.Unshift arr,"b" var_export arr '["b", 2, "a", 1] ``` **举例2** ```brush:vb dim arr,dict arr = "初始值" set dict = D_ dict.Add "dict","Dictionary对象" POP_MVC.Arr.Unshift arr,"c" POP_MVC.Arr.Unshift arr,dict var_export arr '[{"dict":"Dictionary对象"}, "c", "初始值"] ``` ### Insert 函数 **功能** 向数组某个下标处插入元素,其后元素后移 **参数说明** Sub Unshift( byref arr,byval item ) arr 参数,待操作数组,如果arr不是数组,则将其转化为数组 pos 参数,待插入的下标位置, * 从0处插入元素,相当于使用了Unshift * 插入位置大于数组长度,则从尾部插入,相当于Push * 如果插入位置是负数,那么从尾部开始算起,-1为最后一个元素,-2为倒数第2个元素 item 参数,待操作元素 **返回值** 无返回值,直接将元素添加到数组上 **举例** ```brush:vb dim arr,dict arr = "初始值" '从0处插入元素,相当于使用了Unshift POP_MVC.Arr.Insert arr,0,"1" '[1, "初始值"] '插入位置大于数组长度,则从尾部插入,相当于Push POP_MVC.Arr.Insert arr,5,"2" '[1, "初始值", 2] '如果插入位置是负数,那么从尾部开始算起,-1为最后一个元素,-2为倒数第2个元素 POP_MVC.Arr.Insert arr,-1,3 '[1, "初始值", 3, 2] '如果负数的绝对值大于数组长度,则相当于使用了Unshift POP_MVC.Arr.Insert arr,-100,4 '[4, 1, "初始值", 3, 2] ``` ### InsertArr 函数 **功能** 向数组某个下标处插入一组元素,其后元素后移 **参数说明** Sub InsertArr( ByRef arr,ByVal pos,ByRef items ) arr 参数,待操作数组,如果arr不是数组,则将其转化为数组 pos 参数,待插入的下标位置, * 从0处插入元素,相当于使用了Unshift * 插入位置大于数组长度,则从尾部插入,相当于Push * 如果插入位置是负数,那么从尾部开始算起,-1为最后一个元素,-2为倒数第2个元素 items 参数,待插入的数组 **返回值** 无返回值,直接将元素添加到数组上 **举例** ```brush:vb dim arr,items arr = array(1,2,3) items = array("a","b") '从下标为1的之间插入数组 'POP_MVC.Arr.InsertArr arr,1,items '[1, "a", "b", 2, 3] '从最后一个元素之前插入数组 'POP_MVC.Arr.InsertArr arr,-1,items '[1, 2, "a", "b", 3] '从头上插入数组 'POP_MVC.Arr.InsertArr arr,0,items '["a", "b", 1, 2, 3] '从尾部插入数组 'POP_MVC.Arr.InsertArr arr,ubound(arr)+1,items '[1, 2, 3, "a", "b"] '给一个大于数组长度的值,仍从尾部插入数组 'POP_MVC.Arr.InsertArr arr,100000,items '[1, 2, 3, "a", "b"] ``` 上面四个函数,Push、Unshift、Insert、InsertArr四个函数都是向数组中添加元素,前三个函数是将元素插入到数组中,如果元素为数组,插入到数组中后,仍旧保留数组格式,InsertArr与前三个不同,它是将一个数组中的各个元素插入到另一个数组中。这四个函数均无返回值,直接操作的是传入的数组。 有插入就有删除,删除数组元素的函数有Pop、Shift、Remove函数。 ### Pop 函数 **功能** 从尾部删除一个元素,并返回该元素 **参数说明** Function Pop( ByRef arr ) arr 参数,待操作数组 **返回值** 返回被删除的元素。如果arr不是数组,返回值为Empty,注意返回的元素可能为对象,如果要判断返回元素的类型,可以使用 POP_MVC.Arr.item ,该属性保存的是最后一次删除的元素 **举例** ```brush:vb dim arr,dict,items,ret arr = array(1,2,3) set dict = D_ dict("test") = "obj" '注意最后一个元素为对象 POP_MVC.Arr.push arr,dict '将数组元素打乱,无法确定对象在哪里了 POP_MVC.Arr.Shuffle arr '下面这种写法很可能出错,因为没法确定弹出的最后一个元素不是对象,如果是对象须使用set ret = POP_MVC.Arr.Pop(arr) '如果能确定所有的元素都不是对象,这种写法则没问题 '混杂着标量与对象的数组,取元素应该如下使用 call POP_MVC.Arr.Pop(arr) if isObject( POP_MVC.Arr.item ) then set ret = POP_MVC.Arr.item else ret = POP_MVC.Arr.item end if ``` ### Shift 函数 **功能** 从头部删除一个元素,并返回该元素 **参数说明** Function Shift( ByRef arr ) arr 参数,待操作数组 **返回值** 返回被删除的元素。如果arr不是数组,返回值为Empty,注意返回的元素可能为对象,如果要判断返回元素的类型,可以使用 POP_MVC.Arr.item ,该属性保存的是最后一次删除的元素 **举例** ```brush:vb dim arr,dict,items,ret arr = array(1,2,3) set dict = D_ dict("test") = "obj" '注意最后一个元素为对象 POP_MVC.Arr.push arr,dict '将数组元素打乱,无法确定对象在哪里了 POP_MVC.Arr.Shuffle arr 'Pop函数是从尾部弹出一个元素,而Shift正好与它相反,是从头部删除一个元素 '同Pop函数,下面这种写法很可能出错,因为没法确定被删除元素的数据类型 ret = POP_MVC.Arr.Shift(arr) '如果当初在设计数组时,已经知道元素都是标量,则可以这样使用 '混杂着标量与对象的数组,取元素应该如下使用 call POP_MVC.Arr.Shift(arr) if isObject( POP_MVC.Arr.item ) then set ret = POP_MVC.Arr.item else ret = POP_MVC.Arr.item end if ``` ### Remove 函数 **功能** 从数组中按下标位置删除一个元素 **参数说明** Function Shift( ByRef arr ) arr 参数,待操作数组 pos 参数,待删除元素的下标 如果下标小于0,则-1代表最后一个元素(即ubound(arr) ),-2代表倒数第二个元素 如果下标大于数组的最大上标,如果下标值无效,不进行交换。 **返回值** 返回被删除的元素。如果arr不是数组,返回值为Empty,注意返回的元素可能为对象,如果要判断返回元素的类型,可以使用 POP_MVC.Arr.item ,该属性保存的是最后一次删除的元素 **举例** ```brush:vb dim arr,dict,items,ret arr = array(1,2,3) set dict = D_ dict("test") = "obj" '注意最后一个元素为对象 POP_MVC.Arr.push arr,dict '将数组元素打乱,无法确定对象在哪里了 POP_MVC.Arr.Shuffle arr 'Pop函数与Shift函数是从两端删除元素,而Remove须明确指定位置 '同Pop、Shift函数,下面这种写法很可能出错,因为没法确定被删除元素的数据类型 ret = POP_MVC.Arr.Remove(arr,1) '如果当初在设计数组时,已经知道元素都是标量,则可以这样使用 '混杂着标量与对象的数组,取元素应该如下使用 call POP_MVC.Arr.Remove(arr,1) if isObject( POP_MVC.Arr.item ) then set ret = POP_MVC.Arr.item else ret = POP_MVC.Arr.item end if ``` 除了上面的给数组增加或者删除元素的数组外,还有其他几个函数,也涉及到了修改数组。 ### Swap 函数 **功能** 交换数组中两个下标的值 **参数说明** sub Swap( ByRef arr, ByVal i, ByVal j) arr 参数,待操作数组 i 参数,第一个要交换的下标 j 参数,第二个要交换的下标 如果下标小于0,则-1代表最后一个元素(即ubound(arr) ),-2代表倒数第二个元素 如果下标大于数组的最大上标,如果下标值无效,不进行交换。 **返回值** 无返回值,直接在数组上进行修改 **举例** ```brush:vb dim arr,dict,items,ret arr = array(1,2,3) set dict = D_ dict("test") = "obj" '最后一个元素添加的是Dictionary对象 POP_MVC.Arr.push arr,dict '交换第1个与最后一个 call POP_MVC.Arr.Swap( arr, 0 , -1) '[{"test":"obj"}, 2, 3, 1] ``` ## 取片段函数 取片段函数有两个:Slice、Unique、Filter。这两个函数都不会直接修改原数组,而是返回一个新数组。 ### Slice 函数 **功能** 从数组中取出一段 **参数说明** Function Slice( ByRef arr, ByVal offset,ByVal length ) arr 参数,待操作数组 offset 参数,起始下标 length 参数,取出长度 **返回值** 如果给出了 length 并且为正,则序列中将具有这么多的单元。如果给出了 length 并且为负,则序列将终止在距离数组末端这么远的地方。 **举例** ```brush:vb dim arr,ret arr = array("a","b","c","d","e") '从第2个元素开始,取2个元素 ret = POP_MVC.Arr.Slice(arr,1,2) '["b", "c"] '从第3个元素开始取到最后一个 ret = POP_MVC.Arr.Slice(arr,2,-1) '["c", "d", "e"] '从第3个元素开始取100个元素,显然没这么多,那么取到最后一个为止 ret = POP_MVC.Arr.Slice(arr,2,100) '["c", "d", "e"] ``` ### Unique 函数 **功能** 移除数组中重复的值并将剩余的值返回一个数组(原数组不变) **参数说明** Function Unique( ByRef arr ) arr 参数,待操作数组 **返回值** 返回一个新数组 **举例** ```brush:vb dim arr,ret,dict 'arr = array(1,2,"a","b","A","B","1","2",1,2) '剔除了重复元素1、2 ret = POP_MVC.Arr.Unique(arr) '[1, 2, "a", "b", "A", "B", "1", "2"] arr = array(1,#2007-10-10#,1,2,#2007-10-10#) '如果有日期对象,可以正常使用 ret = POP_MVC.Arr.Unique(arr) '[1, "2007\/10\/10", 2] set dict = D_ dict.add "test","obj" arr = array(1,2,dict,1,2,dict) '如果有Dictionary对象,则不能正常使用 ret = POP_MVC.Arr.Unique(arr) '不会得到任何结果,结果为Variant() ``` ### Filter 函数 **功能** 用回调函数过滤数组中的单元 **参数说明** `Function [Filter]( Byref input, Byref callback )` input 参数,待操作数组 callback 参数,回调函数 依次将 input 数组中的每个值传递到 callback 函数。如果 callback 函数返回 TRUE,则 input 数组的当前值会被包含在返回的结果数组中。 **返回值** 返回符合过滤条件的新数组,如果没有符合条件的值时,返回空数组。 **举例1** ```brush:vb '原生的filter函数也可以实现过滤功能 '返回下标从零开始的数组,其中包含以特定过滤条件为基础的字符串数组的子集 dim arr,ret arr = array( "过滤cc","dd" , "过滤ee","abcd" ) ret = Filter(arr,"过滤") '["过滤cc", "过滤ee"] ret = Filter(arr,"过滤",false) '["dd", "abcd"] ``` **举例2** ```brush:vb '定义过滤函数 Function includeFunc( item ) if POP_MVC.String.Exists(item,"过滤") Then includeFunc = true else includeFunc = false end if End Function ``` ```brush:vb 'POP_MVC.Arr.Filter也可以实现原生Filter的功能 dim arr,ret arr = array( "过滤cc","dd" , "过滤ee","abcd" ) ret = POP_MVC.Arr.Filter(arr,"includeFunc") '["过滤cc", "过滤ee"] ``` **举例3** ```brush:vb '定义过滤函数 Function FilterFunc( item ) if DateDiff( "s", "2013-10-1" , item(2) ) > 0 then FilterFunc = True else FilterFunc = False end if End Function ``` ```brush:vb '使用 POP_MVC.Arr.Filter 函数对一维数组可以实现更为复杂的过滤,自不必说 '现在来看,如何使用它对二维数组进行过滤 dim arr,ret arr = array( _ array("1","a","2011-3-4") , _ array("2","b","2010-4-5") , _ array("3","c","2014-1-1") , _ array("4","d","2016-8-16") _ ) ret = POP_MVC.Arr.Filter(arr,"filterFunc") '[[3, "c", "2014-1-1"], [4, "d", "2016-8-16"]] ``` ## 查找函数 ### Exists 函数 **功能** 判断某个值是否存在于数组中,返回True或者False **参数说明** Function Exists( ByRef arr,ByRef val ) arr 参数,待查找数组 val 参数,待查找的值,只能是标量,或者可以通过=来判断相等的对象 **返回值** 存在返回True,不存在返回False **举例** ```brush:vb dim arr,ret arr = array(1,2,3,"a","b","c") ret = POP_MVC.Arr.Exists(arr,3) ' True ret = POP_MVC.Arr.Exists(arr,11) ' False ``` ### Search 函数 **功能** 在数组中搜索给定的值,如果成功则返回相应的键名,否则返回-1 **参数说明** Function Search(ByRef arr,ByRef val) arr 参数,待查找数组 val 参数,待查找的值,只能是标量,或者可以通过=来判断相等的对象 **返回值** 存在返回下标值,不存在返回-1 **举例** ```brush:vb dim arr,ret arr = array(1,2,3,"a","b","c") '查找值3,存在,且下标为2 ret = POP_MVC.Arr.Search(arr,3) ' 2 '查找值11,不存在,返回-1 ret = POP_MVC.Arr.Search(arr,11) ' -1 ``` ## 迭代函数 迭代函数会将每一次迭代得到的结果会作为下一次迭代的初始值,不断逼近所需要的结果。POPASP提供了两个迭代函数:Product、Reduce ### Product 函数 **功能** 计算数组中所有值的乘积 **参数说明** Function Product( ByRef arr ) arr 参数,待操作数组 **返回值** 返回一个数值 **举例** ```brush:vb dim arr,ret arr = array(1,2,3,"a","b","c",4,5) '将数组中的数值元素1、2、3、4、5进行相乘 ret = POP_MVC.Arr.Product(arr) ' 120 ``` Product函数只是简单的将数组中的数值迭代相乘。而这并不能满足个性个需求,如果可以通过自定义的函数将数组中的元素进行迭代,那多棒啊,不负你,POPASP有这样的函数Reduce ### Reduce 函数 **功能** 用回调函数迭代地将数组简化为单一的值 **参数说明** Function Reduce( ByRef arr,ByRef func, ByRef initial) arr 参数,待迭代数组 func 参数,迭代函数的函数名 initial 参数,初始值 **返回值** 返回一个数值或字符串 **举例** ```brush:vb '迭代函数 Function reduceFunc( a,b ) if isNumeric(a) and isNumeric(b) then reduceFunc = a + b * b elseif isNumeric(a) then reduceFunc = a * a elseif isNumeric(b) then reduceFunc = b * b end if End Function ``` ```brush:vb '使用迭代函数 dim arr,ret arr = array("a","b","c",1,2,3) 'ret = 1 + 1*1 + 2*2 + 3*3 ret = POP_MVC.Arr.Reduce(arr,"reduceFunc",1) ' 15 '不要初始值 'ret = 1*1 + 2*2 + 3*3 ret = POP_MVC.Arr.Reduce(arr,"reduceFunc",null) ' 14 ``` ## 排序函数 POPASP提供了丰富的排序函数,有sort、rsort、casesort、casersort、natsort、natrsort、casenatsort、casenatrsort。另外还有个采用自定义函数进行排序的函数,为AscSortByFunc、DescSortByFunc 这么多排序函数,掌握了规律,也很记忆。 先看sort、rsort、casesort、casersort、natsort、natrsort、casenatsort、casenatrsort这几个函数。它们都直接操作数组本身,无返回值。我们以sort为例,来进行讲解 ### sort 函数 **功能** 将字符串数组进行升序排序 **参数说明** sub sort( ByRef arr ) arr 参数,待排序数组 如果两个比较元素同为日期型,则最新的日期值>较早的日期值 如果两个比较元素同为数值型,则比较数值大小 其他值的比较按字符串比较,使用了POP_MVC.String.cmp进行比较 **返回值** 无返回值,直接在传入的数组参数上进行排序 **举例** ```brush:vb dim arr arr = array("a","b","c",1,2,3,"2016-3-1",#2015-4-2#) call POP_MVC.Arr.sort(arr) '[1, 2, "2015\/4\/2", "2016-3-1", 3, "a", "b", "c"] ``` 通过sort函数,可以发现,这组排序函数,都只有一个参数,即待排序的数组,都为sub过程,没有返回值。排序操作直接作用在传入的数组身上。为了说明问题,我们再来看一个。 ### natsort 函数 **功能** 用“自然排序”算法对数组升序排序 **参数说明** sub natsort( ByRef arr ) arr 参数,待排序数组 如果两个比较元素同为日期型,则最新的日期值>较早的日期值 如果两个比较元素同为数值型,则比较数值大小 其他值的比较按字符串比较,使用了 POP_MVC.String.natcmp 进行比较 **返回值** 无返回值,直接在传入的数组参数上进行排序 **举例** ```brush:vb dim arr 'arr数组中有一些文件名,将该文件名进行排序 arr = array("image1.jpg","image5.jpg","image10.jpg","image30.jpg") call POP_MVC.Arr.sort(arr) '["image1.jpg", "image10.jpg", "image30.jpg", "image5.jpg"] '使用sort函数,并不会得到我们想要的结果,须用natsort call POP_MVC.Arr.natsort(arr) '["image1.jpg", "image5.jpg", "image10.jpg", "image30.jpg"] ``` 通过上面的例子,已经将问题说明白,没有必要将每个函数再一一做演示。下面给出这些函数的功能。 | 排序函数 | 采用的比较方法 | 功能 | | -------- | ----- | ---- | | sort | POP_MVC.String.cmp | 将字符串数组进行升序排序 | | rsort | POP_MVC.String.cmp | 将字符串数组进行降序排序 | | casesort | POP_MVC.String.casecmp | 将字符串数组进行升序排序,并且忽略大小写 | | casersort | POP_MVC.String.casecmp | 将字符串数组进行降序排序,并且忽略大小写 | | natsort | POP_MVC.String.natcmp | 用“自然排序”算法对数组升序排序 | | natrsort | POP_MVC.String.natcmp | 用“自然排序”算法对数组降序排序 | | casenatsort | POP_MVC.String.casenatcmp | 用“自然排序”算法对数组升序排序,并且忽略大小写 | | casenatrsort | POP_MVC.String.casenatcmp | 用“自然排序”算法对数组降序排序,并且忽略大小写 | 上面这么多排序函数,在程序内部,升序排序都使用了函数POP_MVC.Arr.AscSortByFunc函数,降序排序都使用了函数POP_MVC.Arr.DescSortByFunc。比如,我们来看sort函数的源码 ```brush:vb sub sort( ByRef arr ) call AscSortByFunc( arr , "POP_MVC.String.cmp") end sub ``` 再比如,我们来看natsort的源码 ```brush:vb sub natrsort( ByRef arr ) call DescSortByFunc( arr , "POP_MVC.String.natcmp") end sub ``` 在函数内部,均一行代码就实现了函数功能。这得归功于POP_MVC.Arr.AscSortByFunc与POP_MVC.Arr.DescSortByFunc函数。而这两函数,是通过私有方法sortByFunc来实现的。 ```brush:vb '按自定义函数进行升序排序 Public Sub AscSortByFunc( ByRef arr , ByRef callback ) call sortByFunc( arr , callback ,false ) End Sub ``` ```brush:vb '按自定义函数进行降序排序 Public Sub DescSortByFunc( ByRef arr , ByRef callback ) call sortByFunc( arr , callback ,true ) End Sub ``` 这些排序函数还有一个特点,在刚才的示例中,可以看到,它们不仅可以对字符串进行排序,而且还可以对数值型、日期型元素进行排序。如果仅仅想通过字符串排序,而不想对这两种类型数据进行排序,可以使用两个属性来关闭。 ```brush:vb 'sortByDate默认值是True POP_MVC.Arr.sortByDate = Fasle 'sortByNumeric默认值是True POP_MVC.Arr.sortByNumeric = Fasle ``` 一般来说,数组中的元素都是同一种类型,如果不同类型的数据在一个数组中排序意义不大,如果数组中有对象类型的数据(非日期对象),则不能进行正常排序。 上面的排序函数,基本已经满足需求。如果想进行个性化的排序,那么就要使用usort函数。 ### usort 函数 **功能** 按用户自定义函数进行排序 **参数说明** Sub usort( ByRef arr,ByRef cmpFunc ) arr 参数,待操作数组 cmpFunc 参数,回调函数 本函数将用用户自定义的比较函数对一个数组中的值进行排序。如果要排序的数组需要用一种不寻常的标准进行排序,那么应该使用此函数。 比较函数必须在第一个参数被认为小于,等于或大于第二个参数时分别返回一个小于,等于或大于零的整数。 **返回值** 无返回值,直接在传入的数组参数上进行排序 **举例** ```brush:vb '定义排序函数 Function sortFunc( item ) sortFunc = DateDiff( "s", "2013-10-1" , item(2) ) End Function ``` ```brush:vb '使用 POP_MVC.Arr.usort 函数对一维数组可以实现更为复杂的排序,自不必说 '现在来看,如何使用它对二维数组进行排序 dim arr,ret arr = array( _ array("1","a","2011-3-4") , _ array("2","b","2010-4-5") , _ array("3","c","2014-1-1") , _ array("4","d","2016-8-16") _ ) '[[2, "b", "2010-4-5"], [1, "a", "2011-3-4"], [3, "c", "2014-1-1"], [4, "d", "2016-8-16"]] ret = POP_MVC.Arr.usort(arr,"sortFunc") ``` ## 其他函数 ### Shuffle 函数 **功能** 将数组打乱 本函数打乱(随机排列单元的顺序)一个数组 **参数说明** Sub Shuffle (ByRef arr) arr 参数,待操作数组 **返回值** 无返回值,直接在传入的数组参数上进行操作 **举例** ```brush:vb dim arr arr = array("a","b","c","d") '每次打乱后的结果都不一样 call POP_MVC.Arr.Shuffle(arr) '["c", "b", "a", "d"]这是其中之一 ``` ### Merge 函数 **功能** 将两个数组合并 将第二个数组追加到第二个数组的末尾 **参数说明** Function Merge( ByRef arr1,ByRef arr2 ) arr1 参数,待操作数组一 arr2 参数,待操作数组二 **返回值** 返回合并后的数组 **举例** ```brush:vb dim arr1,arr2,arr arr1 = array("a","b","c") arr2 = array("c","d","e") arr = POP_MVC.Arr.Merge(arr1,arr2) '["a", "b", "c", "c", "d", "e"] ``` ### toDict 函数 **功能** 将数组转化成Dictionary对象 **参数说明** Function toDict( ByRef arr ) arr 参数,待操作数组 **返回值** 返回Dictionary对象 **举例** ```brush:vb dim arr,dict arr = array("a","b","c") set dict = POP_MVC.Arr.toDict(arr) '{"0":"a", "1":"b", "2":"c"} ``` ### Map 函数 **功能** 将回调函数作用到给定数组的单元上,并返回一个新数组 **参数说明** Function Map( ByRef arr,ByRef callback ) arr 参数,待操作数组 callback 参数,回调函数 **返回值** 返回一个新数组 **举例** ```brush:vb '定义回调函数 Function mapFunc(item) mapFunc = item & "-" & item End Function ``` ```brush:vb dim arr,ret arr = array("a","b","c") ret = POP_MVC.Arr.Map(arr,"mapFunc") '["a-a", "b-b", "c-c"] ``` ### Reverse 函数 **功能** 返回一个单元顺序相反的数组 **参数说明** Function Reverse( ByRef arr ) arr 参数,待操作数组 如果传入的不是数组或者长度为0的数组,均返回Array(),如果只含一个元素的数组,则原样返回。 其他情况都会正常反转数组 **返回值** 返回一个单元顺序相反的数组 **举例** ```brush:vb dim arr,ret arr = array("a","b","c","d") ret = POP_MVC.Arr.Reverse(arr) '["d", "c", "b", "a"] ```