forEachReversed: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
(Created page with "{{RV|type=command |game1= arma3 |version1= 2.14 |branch= dev |gr1= Arrays |descr= Interates over given array from last index to first index. |s1= code {{subst:PAGENAMEE...")
 
m (Some wiki formatting)
 
(5 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{RV|type=command
{{RV|type=command


|game1= arma3
|game1=arma3
|version1= 2.14
|version1= 2.14


|branch= dev
|gr1=Program Flow
|gr2=Arrays


|gr1= Arrays
|descr= Executes the given command(s) on every item of an [[Array]] in reversed order, compared to [[forEach]].
 
|descr= Interates over given array from last index to first index.


|s1= code [[forEachReversed]] array
|s1= code [[forEachReversed]] array


|p1= code: [[Code]] - Code applied to each array entry
|p1= code: [[Code]] to execute on each array item - available variables:
* {{hl|[[Magic Variables#x|_x]]}}: iterated item
* {{hl|[[Magic Variables#x|_x]]}}: iterated item
* {{hl|[[Magic Variables#forEachIndex|_forEachIndex]]}}: item's index
* {{hl|[[Magic Variables#forEachIndex|_forEachIndex]]}}: item's index


|p2= array: [[Array]] - The array to iterate over
|p2= array: [[Array]] - the array to iterate over
 
|r1= [[Anything]] - will return the value of last executed statement
 
|x1= This command lets you easily iterate through an array from last to first element without modifying the array itself with [[reverse]] or using [[for]] loop with negative [[step]].
<sqf>
// Will show numbers from 5 to 1 in the chat
{ systemChat str _x } forEachReversed [1, 2, 3, 4, 5];
</sqf>
 
|x2= Can be useful to walk through array while also deleting items from it, which you couldn't do with [[forEach]] as easily:
<sqf>
private _array = [1, 1, 2, 2, 1, 1, 2, 2];
{
if (_x == 2) then { _array deleteAt _forEachIndex };
} forEachReversed _array;
// _array will be [1,1,1,1] here
</sqf>


|r1= [[Anything]] - Will return the value of last executed statement
Will not work with [[forEach]] as you might expect it:
<sqf>
private _array = [1, 1, 2, 2, 1, 1, 2, 2];
{
if (_x == 2) then { _array deleteAt _forEachIndex };
} forEach _array;
// _array will be [1, 1, 2, 1, 1, 2] here
</sqf>


|x1= <sqf>{
|x3= Deleting items from array with more complex condition than just comparison.
    if (isNull _x) then { _array deleteAt _forEachIndex };
<sqf>
} forEachReverse _array;</sqf>
{
if (!alive _x) then { _vehicles deleteAt _forEachIndex };
} forEachReversed _vehicles;
</sqf>


|seealso= [[forEachIndex]]
|seealso= [[Control Structures]] [[forEach]] [[for]] [[apply]] [[while]] [[select]] [[findIf]] [[count]] [[deleteAt]] [[reverse]]
}}
}}

Latest revision as of 13:42, 12 March 2024

Hover & click on the images for description

Description

Description:
Executes the given command(s) on every item of an Array in reversed order, compared to forEach.
Groups:
Program FlowArrays

Syntax

Syntax:
code forEachReversed array
Parameters:
code: Code to execute on each array item - available variables:
array: Array - the array to iterate over
Return Value:
Anything - will return the value of last executed statement

Examples

Example 1:
This command lets you easily iterate through an array from last to first element without modifying the array itself with reverse or using for loop with negative step.
// Will show numbers from 5 to 1 in the chat { systemChat str _x } forEachReversed [1, 2, 3, 4, 5];
Example 2:
Can be useful to walk through array while also deleting items from it, which you couldn't do with forEach as easily:
private _array = [1, 1, 2, 2, 1, 1, 2, 2]; { if (_x == 2) then { _array deleteAt _forEachIndex }; } forEachReversed _array; // _array will be [1,1,1,1] here
Will not work with forEach as you might expect it:
private _array = [1, 1, 2, 2, 1, 1, 2, 2]; { if (_x == 2) then { _array deleteAt _forEachIndex }; } forEach _array; // _array will be [1, 1, 2, 1, 1, 2] here
Example 3:
Deleting items from array with more complex condition than just comparison.
{ if (!alive _x) then { _vehicles deleteAt _forEachIndex }; } forEachReversed _vehicles;

Additional Information

See also:
Control Structures forEach for apply while select findIf count deleteAt reverse

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