【问题标题】:Function to compare arrays in Vbscript在 Vbscript 中比较数组的函数
【发布时间】:2016-04-26 16:25:30
【问题描述】:

我正在尝试在 vbscript 中为 UFT 编写一个函数,该函数比较两个数组并确保两个数组中的所有值都完全匹配。 但是,值的顺序可能不一致。

 Function CompareArrays(array1, array2)

   Dim i,j
   Dim arrkeys1,arrKeys2
   arrkeys1 = array1.keys
   arrkeys2 = array2.keys

  'Do they have the same number of items?
   If array1.Count <> array2.Count Then
    CompareArrays = False
    Exit Function
   End If

  'Compare keys and values

  For i = 0 To UBound(arrKeys2)

      If Not array2.Exists(arrKeys1(i)) Then
     'array1 has a key which array2 doesn't have  
      CompareArrays = False
      Exit Function         
      End If

        For j  = 0 To Ubound(arrkeys1)

          If array1(i) <> array2(j)  Then
            print "Value"& array1(i) " not found in current position" 
            CompareArrays = False
            Else 
            print "Value Found"
            CompareArrays =True
          End If
        Next'j 
  Next 'i 

  End Function

我认为这个脚本的逻辑可能有问题。 而且我根本没有输出。 该函数应该只返回 CompareArrays 是 True 还是 False。 要比较的数组示例:

dim Array1
set Array1=CreateObject("Scripting.Dictionary")
Array1.Add "Tom", "20"
Array1.Add "Rob", "20"
Array1.Add "Harry", "40"

dim Array2
set Array2=CreateObject("Scripting.Dictionary")
Array2.Add "Rob", "20"
Array2.Add "Tom", "20"
Array2.Add "Harry", "40"

任何帮助将不胜感激。

【问题讨论】:

  • 我用一个在线工作示例更新了我的答案,希望对您有所帮助

标签: arrays vbscript hp-uft


【解决方案1】:

在 VBScript 中,Array 不是具有 Keys/Exists/Count 方法的对象。

我认为您实际上是在尝试比较 2 个存储键和值的字典对象。

下面的脚本会比较字典。

 Function CompareArrays(array1, array2)

        'Do they have the same number of items?
        If array1.Count <> array2.Count Then
            CompareArrays = False
            Exit Function
        End If

        'Compare keys and values
        For Each Key in array1.Keys

                'Check Keys
                If NOT(array2.Exists(Key)) Then
                    CompareArrays = False
                    Exit Function
                End If

                'Check Value
                If array1.Item(Key) <> array2.Item(Key) Then
                    CompareArrays = False
                    Exit Function
                End If
        Next

        CompareArrays = True

  End Function

【讨论】:

  • 这太完美了!非常感谢。
  • @Dighate,我没有检查任何订单!对于您的输入,我得到“真”作为输出。再次检查。
  • 事实证明,UFT Ide 无法识别 array.keys 语句中的每个“键”。但是,当我将 key 定义为 key = array1.keys 时,它起作用了。非常感谢。
【解决方案2】:

在进行比较之前,您应该尝试订购两个数组,我没有 Visual Basic 编辑器,但这可能有效:

Imports System
Imports Microsoft.VisualBasic

Public Module Module1

    Public Sub Main()
        dim a1 as Array = {1,2,3}
        dim a2 as Array = {3,2,1}
        dim result = CompareArrays(a1,a2)
        Console.WriteLine("comparison = " & result)

        dim a3 as Array ={"a","b","c"}
        dim a4 as Array = {"b","c","h"}

        result = CompareArrays(a3,a4)
        Console.WriteLine("comparison = " & result)

    End Sub

    Function CompareArrays(array1, array2) as Boolean
        Console.WriteLine(array1)

        If array1.Length <> array2.Length Then
            return false
        End If
       Array.Sort(array1)
       Array.Sort(array2)

        For i as integer = 0 To UBound(array1)
           if(array1(i) <> array2(i))
            return false
           End If
        Next
    return true
    End Function


End Module

output:
comparison = True
comparison = False

我找到了一个vb在线编译器,示例如下: https://dotnetfiddle.net/uI1Mp4

【讨论】:

  • 不会的。它是 VB.Net。数组不是 VBScript 中的对象。
  • 我更新了我的答案我找到了一个在线VB编辑器,希望对你有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多