apply: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
(Corrected some stuff)
m (Text replacement - "(\|[pr][0-9]+ *= *[^-]+) *- *C([a-eg-z])" to "$1 - c$2")
 
(14 intermediate revisions by 2 users not shown)
Line 7: Line 7:
|gr2= HashMap
|gr2= HashMap


|descr= Applies the given code to each element of the given data structure and returns the result as an array.
|descr= Applies the given code to each element of the given data structure and collects the results in an array.


|s1= array [[apply]] code
|s1= array [[apply]] code


|p1= array: [[Array]] - Array of [[Anything]]
|p1= array: [[Array]] - array of [[Anything]]


|p2= code: [[Code]] - Code to be executed on each element of the array. The current element value is stored in the magic variable [[Magic Variables#x|_x]].
|p2= code: [[Code]] - code to be executed on each element of the array. The current element value is stored in the magic variable [[Magic Variables#x|_x]].


|r1= [[Array]] - Resulting array
|r1= [[Array]] - resulting array


|s2= hashmap [[apply]] code
|s2= hashmap [[apply]] code
|s2since= arma3 2.04
|s2since= arma3 2.04


|p21= hashmap: [[HashMap]]
|p21= hashmap: [[HashMap]]


|p22= code: [[Code]] - Code to be executed on each key-value pair of the hashmap. The current key is stored in the magic variable variable [[Magic Variables#x|_x]], the corresponding value is stored in [[Magic Variables#y|_y]].
|p22= code: [[Code]] - code to be executed on each key-value pair of the hashmap. The current key is stored in the magic variable [[Magic Variables#x|_x]], the corresponding value is stored in [[Magic Variables#y|_y]].


|r2= [[Array]] - Resulting array
|r2= [[Array]] - resulting array


|x1= <code>_arr = [1,2,3,4,5,6,7,8,9,0] [[apply]] {[1,0] [[select]] (_x % 2 == 0)}; {{cc|[1,0,1,0,1,0,1,0,1,0]}}</code>
|x1= <sqf>private _arr = [1,2,3,4,5,6,7,8,9,0] apply { [1,0] select (_x % 2 == 0) }; // [1,0,1,0,1,0,1,0,1,0]</sqf>


|x2= <code>_arr = [1,2,3,4,5,6,7,8,9,0] [[apply]] {_x ^ _x}; {{cc|[1,4,27,256,3125,46656,823543,16777216,387420480,1]}}</code>
|x2= <sqf>private _arr = [1,2,3,4,5,6,7,8,9,0] apply { _x ^ _x }; // [1,4,27,256,3125,46656,823543,16777216,387420480,1]</sqf>


|x3= <code>_arr1 = [];
|x3= <sqf>
_arr1 [[resize]] 20;
private _arr1 = [];
_arr2 = _arr1 [[apply]] {0}; {{cc|[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}}</code>
_arr1 resize 20;
_arr2 = _arr1 apply { 0 }; // [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
</sqf>


|x4= <code>[0,1,2,3,4] [[apply]] {[[str]] _x}; {{cc|["0","1","2","3","4"]}}</code>
|x4= <sqf>[0,1,2,3,4] apply { str _x }; // ["0","1","2","3","4"]</sqf>


|x5= <code>_hashmap = [[createHashMapFromArray]] [["Key 1", "Value 1"], ["Key 2", "Value 2"]];
|x5= <sqf>
_array = _hashmap [[apply]] {_y [[+]] " Test"}; {{cc|["Value 2 Test","Value 1 Test"]}}</code>
private _hashmap = createHashMapFromArray [["Key 1", "Value 1"], ["Key 2", "Value 2"]];
private _array = _hashmap apply { _y + " Test" }; // ["Value 2 Test","Value 1 Test"]
</sqf>


|seealso= [[set]] [[resize]] [[pushBack]] [[pushBackUnique]] [[select]] [[reverse]] [[count]] [[find]] [[in]] [[forEach]] [[deleteAt]] [[deleteRange]] [[append]] [[sort]] [[arrayIntersect]]
|seealso= [[set]] [[resize]] [[pushBack]] [[pushBackUnique]] [[select]] [[reverse]] [[count]] [[find]] [[in]] [[forEach]] [[deleteAt]] [[deleteRange]] [[append]] [[sort]] [[arrayIntersect]]
}}
}}


<dl class="command_description">
{{Note
|user= Fusselwurm
|timestamp= 20160218110300
|text= (to anyone else wondering, I took a minute to get it) this is {{Link|https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map|Array.map()}} in JavaScript
}}


<dt></dt>
{{Note
<dd class="notedate">Posted on February 18, 2016 - 11:03 (UTC)</dd>
|user= Lou Montana
<dt class="note">[[User:Fusselwurm|Fusselwurm]]</dt>
|timestamp= 20180211230200
<dd class="note">
|text= if performance really is an issue, [[apply]] seems to be (very) slightly faster than [[forEach]] (by more or less one percent, 0.7-1.5% in my tests to be precise).
(to anyone else wondering, I took a minute to get it): This is Array.map() in JavaScript
}}
</dd>
 
<dt><dt>
<dd class="notedate">Posted on February 11, 2018 - 23:02 (UTC)</dd>
<dt class="note">[[User:Lou Montana|Lou Montana]]</dt>
<dd class="note">
if performance really is an issue, [[apply]] seems to be (very) slightly faster than [[forEach]] (by more or less one percent, 0.7-1.5% in my tests to be precise).
</dd>
 
</dl>

Latest revision as of 14:00, 8 November 2023

Hover & click on the images for description

Description

Description:
Applies the given code to each element of the given data structure and collects the results in an array.
Groups:
ArraysHashMap

Syntax

Syntax:
array apply code
Parameters:
array: Array - array of Anything
code: Code - code to be executed on each element of the array. The current element value is stored in the magic variable _x.
Return Value:
Array - resulting array

Alternative Syntax

Syntax:
hashmap apply code
Parameters:
hashmap: HashMap
code: Code - code to be executed on each key-value pair of the hashmap. The current key is stored in the magic variable _x, the corresponding value is stored in _y.
Return Value:
Array - resulting array

Examples

Example 1:
private _arr = [1,2,3,4,5,6,7,8,9,0] apply { [1,0] select (_x % 2 == 0) }; // [1,0,1,0,1,0,1,0,1,0]
Example 2:
private _arr = [1,2,3,4,5,6,7,8,9,0] apply { _x ^ _x }; // [1,4,27,256,3125,46656,823543,16777216,387420480,1]
Example 3:
private _arr1 = []; _arr1 resize 20; _arr2 = _arr1 apply { 0 }; // [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
Example 4:
[0,1,2,3,4] apply { str _x }; // ["0","1","2","3","4"]
Example 5:
private _hashmap = createHashMapFromArray [["Key 1", "Value 1"], ["Key 2", "Value 2"]]; private _array = _hashmap apply { _y + " Test" }; // ["Value 2 Test","Value 1 Test"]

Additional Information

See also:
set resize pushBack pushBackUnique select reverse count find in forEach deleteAt deleteRange append sort arrayIntersect

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
Fusselwurm - c
Posted on Feb 18, 2016 - 11:03 (UTC)
(to anyone else wondering, I took a minute to get it) this is Array.map() in JavaScript
Lou Montana - c
Posted on Feb 11, 2018 - 23:02 (UTC)
if performance really is an issue, apply seems to be (very) slightly faster than forEach (by more or less one percent, 0.7-1.5% in my tests to be precise).