why Some point number cannot be removed from the array

   385   4   1
User Avatar
Member
3 posts
Joined: 2月 2023
Offline
vector pos = point(0, "P", 6);
int npts = nearpoints(0, pos, 1.5);

printf("%s\n", npts);

foreach(int npt; npts){
if(npt == 6 || npt == 1){
removevalue(npts, npt);
}
}

printf("%s\n", npts);

===========result:
{6, 1, 5, 7, 11}
{1, 5, 7, 11}


Why point 1 cannot be removed

Attachments:
diagram.png (2.1 MB)

User Avatar
Member
4520 posts
Joined: 2月 2012
Offline
Hi,

You shouldn't modify the array you are looping over when using foreach loop. You don't have to loop over the elements like that to remove values. Just do like this:

removevalue ( npts, 6 );
removevalue ( npts, 1 );

Or loop over the elements to remove:

int elements [ ] = { 6, 1 };
foreach ( int element; elements )
    removevalue ( npts, element );
Edited by animatrix_ - 2024年4月12日 11:24:47
Senior FX TD @ Industrial Light & Magic
Get to the NEXT level in Houdini & VEX with Pragmatic VEX! [www.pragmatic-vfx.com]

youtube.com/@pragmaticvfx | patreon.com/animatrix | pragmaticvfx.gumroad.com
User Avatar
Member
396 posts
Joined: 11月 2016
Offline
You remove 6, array is now {1,5,7,11}, next iteration is performed on the second element of the array, 5, so 1 is never iterated upon.
User Avatar
Member
3 posts
Joined: 2月 2023
Offline
动画师_
Hi,

You shouldn't modify the array you are looping over when using foreach loop. You don't have to loop over the elements like that to remove values. Just do like this:

removevalue ( npts, 6 );
removevalue ( npts, 1 );

Or loop over the elements to remove:

int elements [ ] = { 6, 1 };
foreach ( int element; elements )
    removevalue ( npts, element );


I understand, thank you very much!
User Avatar
Member
3 posts
Joined: 2月 2023
Offline
Tanto
You remove 6, array is now {1,5,7,11}, next iteration is performed on the second element of the array, 5, so 1 is never iterated upon.
thank you very much
  • Quick Links