2016-04-26 3 views
1

Я пытаюсь написать функцию для UFT в vbscript, которая сравнивает два массива и гарантирует, что все значения в обоих массивах точно совпадают. Однако порядок значений может быть непоследовательным.Функция для сравнения массивов в Vbscript

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" 

Любая помощь будет высоко оценили.

+0

Я обновил свой ответ рабочим примером в Интернете, надеюсь, что поможет –

ответ

4

В VBScript массив не является объектом, который имеет метод 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 
+0

Это замечательно! Большое спасибо. – Dighate

+0

@ Dighate, я не проверяю какой-либо заказ! Для вашего ввода я получаю «True» в качестве вывода. Проверить снова. – vins

+0

Получается, UFT Ide не распознал для каждого «ключа» в заявлении array.keys. Но когда я определил ключ как key = array1.keys, он сработал. Это очень помогло. – Dighate

1

вы должны попытаться заказать как массивы, прежде чем сделать сравнение, я не имею в редакторе 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

+0

Это не будет. Это VB.Net. array не является объектом в VBScript. – vins

+0

Я обновил свой ответ. Я нашел онлайн-редактор VB, надеюсь, что поможет –