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

本文介绍了如何在VB6和VBS中实现类似JavaScript数组的slice方法,用于从源数组中切片出新的数组。作者Commas提供了详细的代码实现,并给出了使用示例,展示了如何对数值和字符串数组进行切片操作。
摘要由CSDN通过智能技术生成

日期: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

在编程中,复制数组通常涉及创建一个数组并填充其所有元素与原数组相同。以下是几种常见语言中实现数组复制的方法: 1. **JavaScript** (ES6): ```javascript function copyArray(oldArray) { return oldArray.slice(); // 使用slice()方法不会修改原数组 } ``` 2. **Python**: ```python def copy_array(old_array): return old_array.copy() # Python内置的copy()函数 ``` 3. **Java**: ```java public static int[] copyArray(int[] oldArray) { int[] newArray = new int[oldArray.length]; for (int i = 0; i < newArray.length; i++) { newArray[i] = oldArray[i]; } return newArray; } ``` 4. **C#**: ```csharp public static int[] CopyArray(int[] oldArray) { int[] newArray = new int[oldArray.Length]; Array.Copy(oldArray, newArray, newArray.Length); return newArray; } ``` 5. **C++** (使用深拷贝): ```cpp #include <vector> std::vector<int> copyArray(const std::vector<int>& oldArray) { std::vector<int> newArray(oldArray.size()); std::copy(oldArray.begin(), oldArray.end(), newArray.begin()); return newArray; } ``` 6. **C++** (使用指针,浅拷贝适用于数值类型,深拷贝需要自定义拷贝构造函数): ```cpp int* copyArray(int* oldArray, int size) { int* newArray = new int[size]; for (int i = 0; i < size; ++i) { newArray[i] = oldArray[i]; } return newArray; } // 如果需要深拷贝,应为每个元素提供相应的深拷贝操作 ``` 请注意,以上示例中的数组都是值类型的,对于引用类型(如指针、对象),复制通常是浅拷贝,如果需要深度拷贝(完全独立的副本),则需要额外处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Commas.KM

码路共同进步,感恩一路有您

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

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

打赏作者

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

抵扣说明:

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

余额充值