VB6实现数组Slice()函数,可以像JS一样,切片出一个新数组

日期:2021年09月02日
作者:Commas
注释:VB6数组的方法比较少,需要从源数组切片出一个新的数组,实现了类似JS数组的slice方法,目前暂不支持传入负数;



一、VB6版本的数组slice()

Public Function Slice(ByRef arySrc As Variant, ByVal lngStart As Long, ByVal lngEnd As String) As Variant
On Error Resume Next
'函数说明:返回一个新的数组,包含从 lngStart 到 lngEnd (不包括该元素)的 arySrc 中的元素。
'创建作者:Commas
'创建时间:2020-09-01
'修改时间:
'------传参说明------
'arySrc:源数组
'lngStart:规定从何处开始选取,lngStart≥0
'lngEnd:规定从何处结束选取。该参数是数组片断结束处的数组下标,;lngStart≥0;
'------传参说明------
    If lngStart >= lngEnd Then
        '返回一个空字符串数组,与JS的slice保持一致
        Slice = Array("")
    Else
        Dim strTemp As String, aryTemp() As String, sSpt As String, iSpt As Long
        sSpt = vbTab
        
        '(1)复制数组
        strTemp = Join(arySrc, sSpt)
        aryTemp = Split(strTemp, sSpt)
        'Debug.Print "src=", strTemp
        
        '(2)获取需要截取掉的字符位置
        ReDim Preserve aryTemp(lngStart)
        'Debug.Print strTemp, "-", Join(aryTemp, sSpt)
        iSpt = Len(Join(aryTemp, sSpt)) - Len(aryTemp(lngStart)) + 1
        
        '(3)获得截取后的数组
        strTemp = Mid(strTemp, iSpt)
        aryTemp = Split(strTemp, sSpt)
        If lngEnd <> 0 And lngEnd <= UBound(arySrc) + 1 Then
            ReDim Preserve aryTemp(lngEnd - lngStart - 1)
        End If
        'Debug.Print "dest=", Join(aryTemp, sSpt)
        Slice = aryTemp
    End If
End Function

二、VBS版本的数组slice()

Function Slice(arySrc, lngStart, lngEnd)
On Error Resume Next
'函数说明:返回一个新的数组,包含从 lngStart 到 lngEnd (不包括该元素)的 arySrc 中的元素。
'创建作者:Commas
'创建时间:2020-09-01
'修改时间:
'------传参说明------
'arySrc:源数组
'lngStart:规定从何处开始选取,lngStart≥0
'lngEnd:规定从何处结束选取。该参数是数组片断结束处的数组下标,;lngStart≥0;
'------传参说明------
    If lngStart >= lngEnd Then
        '返回一个空字符串数组,与JS的slice保持一致
        Slice = Array("")
    Else
        Dim strTemp, aryTemp, sSpt, iSpt
        sSpt = vbTab
        
        '(1)复制数组
        strTemp = Join(arySrc, sSpt)
        aryTemp = Split(strTemp, sSpt)
        'Debug.Print "src=", strTemp
        
        '(2)获取需要截取掉的字符位置
        ReDim Preserve aryTemp(lngStart)
        'Debug.Print strTemp, "-", Join(aryTemp, sSpt)
        iSpt = Len(Join(aryTemp, sSpt)) - Len(aryTemp(lngStart)) + 1
        
        '(3)获得截取后的数组
        strTemp = Mid(strTemp, iSpt)
        aryTemp = Split(strTemp, sSpt)
        If lngEnd <> 0 And lngEnd <= UBound(arySrc) + 1 Then
            ReDim Preserve aryTemp(lngEnd - lngStart - 1)
        End If
        'Debug.Print "dest=", Join(aryTemp, sSpt)
        Slice = aryTemp
    End If
End Function

三、VB6使用slice()的示例

    Dim strTemp As String, aryTemp As Variant
    
    '数值数组
    aryTemp = Array(10, 20, 30)
    aryTemp = Slice(aryTemp, 1, 3)
    Debug.Print Join(aryTemp, ",")
    //立即窗口输出:20,30
    
    '字符串数组
    aryTemp = Array("aaa", "bbb", "ccc")
    aryTemp = Slice(aryTemp, 1, 3)
    Debug.Print Join(aryTemp, ",")
    //立即窗口输出:bbb,ccc

立即窗口输出
20,30
bbb,ccc


版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/120067330

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值