Jump to content

Using Arrays with no duplicated values


tradingcube

Recommended Posts

Hello, i'm new houdini, new to vex and not done any programming for a long time (most of the forum sighs)

Coming from a 3DS Max background I’m absolutely loving Houdini, and can really see the power VEX can have so trying to focus a good chunk of my learning time to get comfortable with it right from the start.

I've been building a very simple point infection model to get familiar with the various bits and pieces.

As part of this I’ve been storing point numbers to an array, using this in a solver and each frame more pt number get added. The only way i could see to do this was to take two arrays, combine them and then deduplicate, but this seemed a bit long winded and not very efficient. Searching around Stack overflow I noticed that in Javascript there was a find function and also this exists in VEX so instead have now used that to search the array and add any unique points on-the-fly.

I guess my question is whether this is actually the best way to do this?

It's little frustrating that find() isn’t listed on the https://www.sidefx.com/docs/houdini/vex/arrays.html page as I’d have probably tried it sooner. Which is why I’m wondering if there is a reason it's not on there?

Sorry bit long winded and hope this makes sense

These are the two options ive used:

using Find() and only writing if not already in the array

i[]@pointsArray1 = {0,2,7,8,10};
i[]@pointsArray2 = {0,3,5,7,8,11,15,16,10};

for (int i=0; i<len(i[]@pointsArray2);i++){
    if (!(find(i[]@pointsArray1, i[]@pointsArray2[i])>=0)) {
         push(i[]@pointsArray1,i[]@pointsArray2[i]);
    }
}

De duplicating the array post

i[]@pointsArray1 = {0,2,7,8,10};
i[]@pointsArray2 = {0,3,5,7,8,11,15,16,10};
i[]@newArray;

foreach (int num; i[]@pointsArray1){
    for(int i = 0; i<len(i[]@pointsArray2);i++){
        if(num == i[]@pointsArray2[i]){
        push(i[]@newArray,i[]@pointsArray2[i]);
        }    
    }
}

push(i[]@pointsArray1,i[]@pointsArray2);

for(int i = 0; i<len(i[]@newArray);i++){
removevalue(i[]@pointsArray1,i[]@newArray[i]);
}

thanks

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...