array.slice(开始,结束)在 vbscript 中?
array.slice(start, end) in vbscript?
有人最喜欢标准的实现(例如 jscript,javascript)array.slicevbscript 中的(开始,结束)函数吗?
它似乎经常被遗漏(无论如何在 vbscript 程序员中),分享一个好的实现会有所帮助。如果没有出现,我想我将不得不回答我自己的问题并写点东西。
这是我过去用过的:
Function Slice(arr, starting, ending)
Dim out_array
If Right(TypeName(arr), 2) = "()" Then
out_array = Array()
ReDim Preserve out_array(ending - starting)
For index = starting To ending
out_array(index - starting) = arr(index)
Next
Else
Exit Function
End If
Slice = out_array
End Function
为了完整性,这可能是一个更好的版本:
Function Slice (aInput, Byval aStart, Byval aEnd)
If IsArray(aInput) Then
Dim i
Dim intStep
Dim arrReturn
If aStart < 0 Then
aStart = aStart + Ubound(aInput) + 1
End If
If aEnd < 0 Then
aEnd = aEnd + Ubound(aInput) + 1
End If
Redim arrReturn(Abs(aStart - aEnd))
If aStart > aEnd Then
intStep = -1
Else
intStep = 1
End If
For i = aStart To aEnd Step intStep
If Isobject(aInput(i)) Then
Set arrReturn(Abs(i-aStart)) = aInput(i)
Else
arrReturn(Abs(i-aStart)) = aInput(i)
End If
Next
Slice = arrReturn
Else
Slice = Null
End If
End Function
这避免了之前答案的一些问题:
- 不考虑数组中的对象
- 允许负开始值和结束值;他们从末尾倒数
- 如果 start 高于 end 给出一个反向数组子集
- 不需要(昂贵的)redim 保留,因为数组是空的
- 如果输入不是数组,则返回定义的结果(
Null
)
- 在输入
上使用内置函数IsArray
代替字符串manipulation/comparison
有人最喜欢标准的实现(例如 jscript,javascript)array.slicevbscript 中的(开始,结束)函数吗?
它似乎经常被遗漏(无论如何在 vbscript 程序员中),分享一个好的实现会有所帮助。如果没有出现,我想我将不得不回答我自己的问题并写点东西。
这是我过去用过的:
Function Slice(arr, starting, ending)
Dim out_array
If Right(TypeName(arr), 2) = "()" Then
out_array = Array()
ReDim Preserve out_array(ending - starting)
For index = starting To ending
out_array(index - starting) = arr(index)
Next
Else
Exit Function
End If
Slice = out_array
End Function
为了完整性,这可能是一个更好的版本:
Function Slice (aInput, Byval aStart, Byval aEnd)
If IsArray(aInput) Then
Dim i
Dim intStep
Dim arrReturn
If aStart < 0 Then
aStart = aStart + Ubound(aInput) + 1
End If
If aEnd < 0 Then
aEnd = aEnd + Ubound(aInput) + 1
End If
Redim arrReturn(Abs(aStart - aEnd))
If aStart > aEnd Then
intStep = -1
Else
intStep = 1
End If
For i = aStart To aEnd Step intStep
If Isobject(aInput(i)) Then
Set arrReturn(Abs(i-aStart)) = aInput(i)
Else
arrReturn(Abs(i-aStart)) = aInput(i)
End If
Next
Slice = arrReturn
Else
Slice = Null
End If
End Function
这避免了之前答案的一些问题:
- 不考虑数组中的对象
- 允许负开始值和结束值;他们从末尾倒数
- 如果 start 高于 end 给出一个反向数组子集
- 不需要(昂贵的)redim 保留,因为数组是空的
- 如果输入不是数组,则返回定义的结果(
Null
) - 在输入 上使用内置函数
IsArray
代替字符串manipulation/comparison