Jump to content

Recommended Posts

Posted (edited)

What's wrong on my function to compare two arrays?

Func _ArrayIsEqual($array1, $array2)

   If Not IsArray($array1) Then Return False
   If Not IsArray($array2) Then Return False

   $iSizeA = UBound($array1)
   $iSizeB = UBound($array2)

   If $iSizeA = $iSizeB Then
      For $i = 0 To $iSizeA - 1 Step 1
         If $array1[$i] <> $array2[$i] Then Return False
      Next
   Else
      Return False
   EndIf
   Return True

EndFunc
Sometimes this error happens: 


Array variable has incorrect number of subscripts or subscript dimension range exceeded .:

I do not know if the error is in the function or where I am using this function, but I did a check on the function not to have problems.

Edited by dromenox
Posted

Remember that the value returned by UBound() is one greater than the index of an array's last element.

Snips & Scripts

  Reveal hidden contents

My Snips: graphCPUTemp ~ getENVvars
My Scripts: Short-Order Encrypter - message and file encryption V1.6.1 ~ AuPad - Notepad written entirely in AutoIt V1.9.4

Feel free to use any of my code for your own use.                                                                                                                                                           Forum FAQ

 

Posted (edited)
  On 9/30/2014 at 1:53 PM, MikahS said:
Remember that the value returned by UBound() is one greater than the index of an array's last element.
 For $i = 0 To $iSizeA - 1 Step 1
Edited by dromenox
Posted
  On 9/30/2014 at 1:55 PM, dromenox said:

 

 

My apologies, but this line will fail if they are not the same and throw that error

If $array1[$i] <> $array2[$i] Then Return False

Snips & Scripts

  Reveal hidden contents

My Snips: graphCPUTemp ~ getENVvars
My Scripts: Short-Order Encrypter - message and file encryption V1.6.1 ~ AuPad - Notepad written entirely in AutoIt V1.9.4

Feel free to use any of my code for your own use.                                                                                                                                                           Forum FAQ

 

Posted (edited)
  On 9/30/2014 at 2:02 PM, dromenox said:

 

If they are not the same: 

If $iSizeA = $iSizeB Then

Then you have not provided enough information for us, please give the full error, as the error message will give the line number. :)

Edited by MikahS

Snips & Scripts

  Reveal hidden contents

My Snips: graphCPUTemp ~ getENVvars
My Scripts: Short-Order Encrypter - message and file encryption V1.6.1 ~ AuPad - Notepad written entirely in AutoIt V1.9.4

Feel free to use any of my code for your own use.                                                                                                                                                           Forum FAQ

 

  • Moderators
Posted

dromenox,

An obvious missing check is that the 2 arrays are both 1D - if you try to read an element of a 2D array with 1D syntax you get the "incorrect number of subscripts " error. So first off I would add a couple of further lines to check the number of dimensions and the size of an eventual second one:

If UBound($array1, 0) <> UBound($array2, 0) Then Return False ; Not both 1D/2D
If UBound($array1, 2) <> UBound($array2, 2) Then Return False ; Not the same size in 2nd dimention (1D arrays return 0)
Then when you check the contents you will need to have separate checks for 1D and 2D arrays - you need different syntax for each as I explained above. ;)

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

  Reveal hidden contents

 

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...