Compare two arrays in a wrangle SOP if statement

   4660   3   1
User Avatar
Member
65 posts
Joined: 9月 2014
Offline
How do I compare two arrays in a if? Do I need to iterate the comparison in a foreach or is there an easier way?

float maxdist = 0.5;
int maxpoints = 15;

int current[] = pcfind(0, "P", @P, maxdist, maxpoints);
int orig[] = pcfind(1, "P", @P, maxdist, maxpoints);

// Well, this doesn't work...
//
// i@group_broken = (current[] != orig[]) ? 1: 0;

float maxdist = 0.5;
int maxpoints = 15;

int current[] = pcfind(0, "P", @P, maxdist, maxpoints);
int orig[] = pcfind(1, "P", @P, maxdist, maxpoints);

// ...or this...
//
// i[]@current = current;
// i[]@orig = orig;
//
// i@group_broken = (i[]@current != i[]@orig) ? 1: 0;

Edited by Farmfield - 2016年7月11日 10:33:01
~ Messing about with pixels, vectors and voxels since 25 years [vimeo.com] ~
User Avatar
Member
702 posts
Joined:
Offline
not 100% sure , but I assume if you need to test the arrays are identical to each other you would need to loop over and compare each element

you can break the loop as soon as one of the values fails the comparison test something like this:

int tester = 1;
int count = 0;
if( len(array1) == len(array2)
{
while( tester )
if( count = len(array1 ) )
tester = 0;

if( array1 == array2 )
count += 1;
else
tester = 0;
}


User Avatar
Member
65 posts
Joined: 9月 2014
Offline
Wow, I thought I had it set so I get a mail when someone replies - apparently not. Much appreciated, I'll check it out, see if it works for the setup I was messing with.
~ Messing about with pixels, vectors and voxels since 25 years [vimeo.com] ~
User Avatar
Member
702 posts
Joined:
Offline
I have noticed the same thing with not receiving notifications

I just ran a quick test of my previous slap code and noticed a few errors, here is a working example run in a detail wrangle:

i[]@ar1 = {0,1,2,3,4};
i[]@ar2 = {0,1,2,3,5};

int tester = 1;
i@result = 0;
int count = 0;
if( len(@ar1) == len(@ar2))
{

while(tester)
{
if( count == len(@ar1) )
tester = 0;

if( @ar1[count] == @ar2[count] )
{
count += 1;
@result = 1;
}else{
tester = 0;
@result = 0;
}
}

}else{

tester = 0;
}

the detail attr result will return 0 if the array is different and return 1 if they are equal

it looks like my code got munged a bit…all the brackets got removed…fixed it now
Edited by sidenimjay - 2016年7月14日 11:28:57
  • Quick Links