findIf: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Text replacement - "\{\{ *codecomment *\| *\/\/ *([^ ]+) *\}\} " to "{{cc|$1}}")
m (Text replacement - "(\|[pr][0-9]+ *= *[^- ]*) *- *Z([a-z ])" to "$1 - z$2")
 
(8 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{RV|type=command
{{RV|type=command


| arma3
|game1= arma3
 
|version1= 1.82
|1.82


|gr1= Arrays
|gr1= Arrays


| Searches for an element within array for which the code evaluates to true.
|descr= Searches for an element within array for which the code evaluates to true. Returns the zero-based index on success or -1 if not found.<br>
Returns the zero-based index on success or -1 if not found.
Code on the right side of the command is evaluated for each element of the array, processed element can be referenced in code as [[Magic Variables#x|_x]].
Code on the right side of the command is evaluated for each element of the array, processed element can be referenced in code as [[_x]].
{{Feature|informative|[[findIf]] terminates as soon as it finds an element that fulfills the condition, thus it is more efficient than [[count]] in scenarios where a check for presence / absence of at least one element should be done (See {{Link|#Example 2}}).}}


{{Informative|[[findIf]] terminates as soon as it finds an element that fulfills the condition, thus it is more efficient than [[count]] in scenarios where you need to check for presence / absence of at least one element that evaluates to true.}}
|s1= array [[findIf]] code


| array [[findIf]] code
|p1= array: [[Array]] - array to search in


|p1= array: [[Array]] - array to search in
|p2= code: [[Code]] - code defining an element to find, processed element can be referenced within the code as [[Magic Variables#x|_x]]
 
|r1= [[Number]] - zero-based position of the first array element for which the code evaluate to true, -1 if not found


|p2= code: [[Code]] - code defining an element to find, processed element can be referenced within the code as [[_x]]
|x1= <sqf>[unit1, unit2, unit3] findIf {not alive _x}; // return index of the first dead unit)</sqf>


| [[Number]] - Zero-based position of the first array element for which the code evaluate to true, -1 if not found
|x2= <sqf>
 
// two ways how to 'wait for all units to be dead':
|x1= <code>[unit1, unit2, unit3] [[findIf]] {[[not]] [[alive]] [[_x]]}; {{codecomment|// return index of the first dead unit)}}</code>
waitUntil { [unit1, unit2, unit3] findIf { alive _x } == -1 }; // fast, terminates as soon as it finds a living unit
|x2= <code>{{cc| two ways how to 'wait for all units to be dead':}}[[waitUntil]] { [unit1, unit2, unit3] [[findIf]] {[[alive]] [[_x]]} == -1 }; {{cc| fast, terminates as soon as it finds a living unit}}[[waitUntil]] { {[[alive]] [[_x]]} [[count]] [unit1, unit2, unit3] == 0 }; {{codecomment|// slow, always goes through all array elements}}</code>
waitUntil { { alive _x } count [unit1, unit2, unit3] == 0 }; // slow, always goes through all array elements
</sqf>


| [[find]] [[count]]
|seealso= [[find]] [[count]]
}}
}}
[[Category:Scripting Commands|{{uc:{{PAGENAME}}}}]]
{{GameCategory|arma3|Scripting Commands}}

Latest revision as of 16:36, 8 November 2023

Hover & click on the images for description

Description

Description:
Searches for an element within array for which the code evaluates to true. Returns the zero-based index on success or -1 if not found.
Code on the right side of the command is evaluated for each element of the array, processed element can be referenced in code as _x.
findIf terminates as soon as it finds an element that fulfills the condition, thus it is more efficient than count in scenarios where a check for presence / absence of at least one element should be done (See Example 2).
Groups:
Arrays

Syntax

Syntax:
array findIf code
Parameters:
array: Array - array to search in
code: Code - code defining an element to find, processed element can be referenced within the code as _x
Return Value:
Number - zero-based position of the first array element for which the code evaluate to true, -1 if not found

Examples

Example 1:
[unit1, unit2, unit3] findIf {not alive _x}; // return index of the first dead unit)
Example 2:
// two ways how to 'wait for all units to be dead': waitUntil { [unit1, unit2, unit3] findIf { alive _x } == -1 }; // fast, terminates as soon as it finds a living unit waitUntil { { alive _x } count [unit1, unit2, unit3] == 0 }; // slow, always goes through all array elements

Additional Information

See also:
find count

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