deleteAt: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Text replacement - " \| +(x[0-9]|p[0-9]{1,2}|descr|game[0-9]|version[0-9]|s[0-9]|exec|r[0-9]|arg|eff|branch|serverExec|gr[0-9]|mp|pr|seealso) *=" to " |$1=")
m (Text replacement - "</dd> <dt><dt>" to "</dd> <dt><dt>")
Line 54: Line 54:
<dd class="note"> <code>_array [[deleteAt]] 0</code>is almost 60x faster than<code>_array = _array - [_array select 0]</code>(Tested with an array of 10.000 strings, iterating through it using a for-from-to-do loop)
<dd class="note"> <code>_array [[deleteAt]] 0</code>is almost 60x faster than<code>_array = _array - [_array select 0]</code>(Tested with an array of 10.000 strings, iterating through it using a for-from-to-do loop)
</dd>
</dd>
<dt><dt>
<dt><dt>
<dd class="notedate">Posted on March 4, 2016 - 15:58 (UTC)</dd>
<dd class="notedate">Posted on March 4, 2016 - 15:58 (UTC)</dd>
Line 61: Line 62:
If you delete elements from an array in descending order (using while or for) it will work.
If you delete elements from an array in descending order (using while or for) it will work.
</dd>
</dd>
<dt><dt>
<dt><dt>
<dd class="notedate">Posted on February 9, 2017 - 22:45 (UTC)</dd>
<dd class="notedate">Posted on February 9, 2017 - 22:45 (UTC)</dd>
Line 74: Line 76:
For more info about iterators, see C++ Iterators.
For more info about iterators, see C++ Iterators.
</dd>
</dd>
<dt><dt>
<dt><dt>
<dd class="notedate">Posted on October 3, 2019 - 13:16 (UTC)</dd>
<dd class="notedate">Posted on October 3, 2019 - 13:16 (UTC)</dd>

Revision as of 10:00, 11 June 2021

Hover & click on the images for description

Description

Description:
Description needed
Groups:
ArraysHashMap

Syntax

Syntax:
Syntax needed
Parameters:
array: Array
index: Number
Return Value:
Return value needed

Alternative Syntax

Syntax:
hashMap deleteAt key
Parameters:
hashMap: HashMap
key : HashMapKey
Return Value:
Anything

Examples

Example 1:
_arr = [1,2,3]; _rem = _arr deleteAt 1; hint str [_rem, _arr]; //[2,[1,3]]
Example 2:
_arr = [1,2,3]; _arr deleteAt (_arr find 0); // non existent item hint str _arr; // [1,2,3] _arr deleteAt (_arr find 2); // existent item hint str _arr; // [1,3]
Example 3:
_arr = [1,2,3]; _arr deleteAt (_arr findIf {(_x % 5) == 0}); // Remove first number that's divisible by 5 hint str _arr; // [1,2,3] _arr deleteAt (_arr findIf {(_x % 2) == 0}); // Remove first number that's divisible by 2 hint str _arr; // [1,3]

Additional Information

See also:
deleteRangesetresizeselectinfindfindIftoArraytoStringforEachcountpushBackpushBackUniqueapplyappendsortparamparamsarrayIntersectsplitStringjoinString

Notes

Report bugs on the Feedback Tracker and/or discuss them on the Arma Discord or on the Forums.
Only post proven facts here! Add Note
Posted on October 15, 2014 - 16:55 (UTC)
Heeeere's Johnny!
_array deleteAt 0is almost 60x faster than_array = _array - [_array select 0](Tested with an array of 10.000 strings, iterating through it using a for-from-to-do loop)
Posted on March 4, 2016 - 15:58 (UTC)
Highhead
Deleting from an array with foreach and _foreachIndex variable is tricky. The array is being altered, the _foreachIndex won't keep up and other elements in the array will be skipped and in worst case not being deleted. If you delete elements from an array in descending order (using while or for) it will work.
Posted on February 9, 2017 - 22:45 (UTC)
Igneous01
To expand on Highheads comment above - this is because forEach implements iterators to traverse a collection, which are read only by definition. The variable _x is an iterator that points to the current item in the collection. Trying to alter _x will have no effect. ARRAY = [1,2,3,4,5,6,7,8]; { _x = 2; } forEach ARRAY // ARRAY is still [1,2,3,4,5,6,7,8] When trying to use deleteAt inside forEach, the behaviour would be undefined as you are invalidating the iterator reference, and it will not know how to traverse to the next element. In short, only use forEach when reading data from an array. For more info about iterators, see C++ Iterators.
Posted on October 3, 2019 - 13:16 (UTC)
Tankbuster
The index you pass to this command is zero based. The first element is number 0 and the second is 1 etc
Posted on February 1, 2021 - 18:06 (UTC)
Freghar
As you would expect from a simple array implementation, array deleteAt (count array - 1); is virtually zero cost (0.0005ms on an array of 1000000 elements), while array deleteAt 0; is very performance heavy (0.7ms on the same huge array).