arrays - 我的数组比较代码出了什么问题?
问题描述
当我给它提供多个值时,我的数组比较函数工作正常。但是当两个数组都只包含一个值时,它就不能正常工作。
工作比较脚本:
<%
Function InArray(Needle, Haystack)
Dim i, x
InArray = False
If UBound(Haystack)>0 Then
For i = 0 To Ubound(Haystack)
If IsArray(Needle) = True Then
For x = 0 To Ubound(Needle)
If Trim(Haystack(i)) = Trim(Needle(x)) Then
InArray = True
Exit Function
End If
Next
Else
If Trim(Haystack(i)) = Trim(Needle) Then
InArray = True
Exit Function
End If
End If
Next
end if
End Function
Dim HRMarray: HRMarray=array(459,14,2345)
Dim ADSarray: ADSarray=array(459,123,14,3345)
For Each HRMemployee In HRMarray
If (inarray(HRMemployee,ADSarray) = False) then
response.write HRMemployee& " missing in ADSarray <br>"
end if
Next
For Each ADSemployee In ADSarray
If (inarray(ADSemployee,HRMarray) = False) then
response.write ADSemployee& " to much in ADSarray <br>"
end if
Next
%>
好的输出:
ADSarray 中缺少 2345
123 到 ADSarray 中的很多
3345 到 ADSarray 中的很多
不工作的比较脚本:
<%
Function InArray(Needle, Haystack)
Dim i, x
InArray = False
If UBound(Haystack)>0 Then
For i = 0 To Ubound(Haystack)
If IsArray(Needle) = True Then
For x = 0 To Ubound(Needle)
If Trim(Haystack(i)) = Trim(Needle(x)) Then
InArray = True
Exit Function
End If
Next
Else
If Trim(Haystack(i)) = Trim(Needle) Then
InArray = True
Exit Function
End If
End If
Next
end if
End Function
Dim HRMarray: HRMarray=array(459)
Dim ADSarray: ADSarray=array(459)
For Each HRMemployee In HRMarray
If (inarray(HRMemployee,ADSarray) = False) then
response.write HRMemployee& " missing in ADSarray <br>"
end if
Next
For Each ADSemployee In ADSarray
If (inarray(ADSemployee,HRMarray) = False) then
response.write ADSemployee& " to much in ADSarray <br>"
end if
Next
%>
挪威克朗输出:
ADSarray 中缺少
459 459 到 ADSarray 中很多
此输出不正确,因为两个数组都包含相同的内容,因此它根本不应该提供任何输出。
我希望有人看到这里出了什么问题。
问候,
弗兰斯
解决方案
省略该If UBound(Haystack)>0 Then
行(以及相应的行end if
),或将其更改为If UBound(Haystack) >= 0 Then
.
说明:UBound
函数返回0
一个元素数组,-1
一个空数组(无元素数组)。
使用以下测试脚本的证明:
option explicit
Dim HRMarray: HRMarray=array(459)
Dim ADSarray: ADSarray=array()
Dim strRes
strRes = _
UBound( HRMarray) & vbTab & varType( HRMarray) & vbTab & typeName( HRMarray) _
& vbNewLine _
& UBound( ADSarray) & vbTab & varType( ADSarray) & vbTab & typeName( ADSarray)
Wscript.Echo strRes
结果:
==> cscript .\SO\56611737a.vbs
0 8204 Variant() -1 8204 Variant()
推荐阅读
- javascript - 如何在组件周围创建一个包装器,以便我可以传递一些道具以及基础组件的所有道具?
- java - 类型不匹配无法从 String 转换为 int
- android - 将普通共享首选项转换为加密共享首选项
- ssas - 如何将事件日志文件数据自动导入 SQL 表
- html - 选择下拉选项和标签不在同一行
- c - 来自 Linux 内核模块的停止指令不起作用
- javascript - jaeger 端点未使用 jaeger Node.js 客户端接收数据
- matlab - 如何优化(减少)由给定 Simulink 模型的 MATLAB HDL CODER 插件生成的 verilog HDL 代码(硬件)的延迟?
- javascript - 我正在用 Node.js 编写一个 javascript mp3 播放器,但它一直告诉我没有这样的文件或目录
- flutter - Flutter print() 和延迟函数未运行