scottb613 285 Posted October 1, 2016 Hi Folks, For today's question for those who have the patience - LOL - I truly search for the answers and make many attempts with the code before posting... What's the proper way to append to an array ? The code below is simply testing for the existence of a "marker" - and if it exists - I want an array of the marker names... I've tried many different iterations trying to get this to work... At one point I was building an array of "position arrays" but var array was losing the position reference - so three positions were giving me a "count" of 9 reflecting each element as opposed to the position arrays - should give me 3... Now I can't even get past the "count" command as it appears to hang the code - I am assuming because my array is mangled... Can someone point me in the right direction ??? The wiki stated that an array destroys the original array when appending elements so I am not sure if I can use the same array in the definition when appending - such as: _myArray = _myArray + [newElement1,newElement2,newElement3]; Thanks... _m1 = getMarkerPos "m1"; _m2 = getMarkerPos "m2"; _m3 = getMarkerPos "m3"; _m4 = getMarkerPos "m4"; _m5 = getMarkerPos "m5"; _m6 = getMarkerPos "m6"; _mkrnam1 = "m1"; _mkrnam2 = "m2"; _mkrnam3 = "m3"; _mkrnam4 = "m4"; _mkrnam5 = "m5"; _mkrnam6 = "m6"; _cnt = 1; { _arrvar = call compile format ["_m%1",_cnt]; _mkXpam = _arrvar select 0; _mkYpam = _arrvar select 1; if (_mkXpam > 0 || _mkYpam > 0) then { if (_cnt == 1) then { _mkrarr = _x; } else { // example: _myArray = _myArray + [newElement1,newElement2,newElement3]; _mkrarr1 = _mkrarr; _mkrarr2 = _x; _mkrarr = _mkrarr1 + _mkrarr2; }; _mkrcnt = count _mkrarr; _cnt = _cnt + 1; }; } foreach [_mkrnam1,_mkrnam2,_mkrnam3,_mkrnam4,_mkrnam5,_mkrnam6]; Regards, Scott Share this post Link to post Share on other sites
Greenfist 1863 Posted October 1, 2016 pushBack adds to array. You could get the existing markers like this: _markerNames = ["m1","m2","m3","m4","m5","m6"]; _existingMarkers = []; { if !(getmarkerpos _x isEqualto [0,0,0]) then { _existingMarks pushback _x } } foreach _markerNames; or simply : _existingMarkers = ["m1","m2","m3","m4","m5","m6"] select { !(getMarkerPos _x isEqualto [0,0,0]) }; 3 Share this post Link to post Share on other sites
davidoss 552 Posted October 1, 2016 _existingMarkers = []; _arrayofstrings = ["m1","m2","m3","m4","m5","m6"]; { if (_x in _arrayofstrings) then { _existingMarkers pushback _x; }; } forEach allMapMarkers; _existingMarkers 1 Share this post Link to post Share on other sites
scottb613 285 Posted October 1, 2016 Hi G, LOL and here we see the difference between a real coder and a hack - everything I've been struggling with condensed into a single line of code... Wow - thanks... So empty arrays need to be declared like this: _existingMarkers = []; Does this do anything different than just trying to populate a var with an array element ? Thanks... Regards,Scott Share this post Link to post Share on other sites
Greenfist 1863 Posted October 1, 2016 On 10/1/2016 at 4:16 PM, scottb613 said: So empty arrays need to be declared like this: _existingMarkers = []; Does this do anything different than just trying to populate a var with an array element ? pushBack just needs an existing array to push to. It can't create a new array. 1 Share this post Link to post Share on other sites
scottb613 285 Posted October 1, 2016 Hi Folks, Thank you both for your responses - gives me plenty to play with - have a good day... Regards, Scott Sent from my iPad using Tapatalk Share this post Link to post Share on other sites
djotacon 190 Posted October 2, 2016 On 10/1/2016 at 4:16 PM, scottb613 said: LOL and here we see the difference between a real coder and a hack - everything I've been struggling with condensed into a single line of code... Wow - thanks... Thanks... Regards, Scott I think you dont know the difference between hacker/coder and "spaguetti" code. Share this post Link to post Share on other sites