count: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
(a better workaround to kronzky note since there is another command is available)
m (Text replacement - "<sqf>([^↵][^<]*↵[^<]*)<\/sqf>" to "<sqf> $1 </sqf>")
 
(137 intermediate revisions by 14 users not shown)
Line 1: Line 1:
{{Command|= Comments
{{RV|type=command
____________________________________________________________________________________________


| ofp |= Game name
|game1= ofp
|version1= 1.00


|1.00|= Game version
|game2= ofpe
|version2= 1.00


|arg= local |= Arguments in MP
|game3= arma1
____________________________________________________________________________________________
|version3= 1.00


| Returns a count for either
|game4= arma2
* the number of elements in array
|version4= 1.00
* the number of elements in array for which given condition is true
* the number of sub-entries in a config object
|= Description
____________________________________________________________________________________________


| condition '''count''' array |= Syntax
|game5= arma2oa
|version5= 1.50


|p1= condition: (optional) [[Code]] that must return [[true]] to be counted.
|game6= tkoh
<br>
|version6= 1.00
The variable ''[[Magic Variables|_x]]'' will contain the currently tested element. |= Parameter 1


|p2= array: [[Array]] |= Parameter 2
|game7= arma3
|version7= 0.50


| [[Number]] |= Return value
|gr1= Arrays


____________________________________________________________________________________________
|gr2= Strings
|s2= '''count''' configname |= Syntax


|p21= configname: [[Config]] |= Parameter 1
|gr3= Config


|r2= [[Number]] |= Return value
|gr4= HashMap
____________________________________________________________________________________________
 
|x1= <code>_cnt = [[count]] [0, 0, 1, 2]; // returns 4</code> |= Example 1


|x2= <code>_cnt = [[count]] [[units]] [[group]] [[player]]; // returns number of units in player group</code> |= Example 2
|descr= Can be used to count:
* The number of elements in an array (returns the already internally known array size)
* The number of elements in an array matching the condition
* The number of sub-entries in a config entry
* {{GVI|arma3|1.28|size= 0.75}} The number of characters in an ANSI string {{Feature|informative|If Unicode support is desired, see [[forceUnicode]].}}


|x3= <code>_fnd = [1, 9, 8, 3, 4, 4, 4, 5, 6];
|s1= [[count]] value
{
 
    [[Magic Variables|_x]] == 4;
|p1= value: [[Array]], [[String]], [[Config]] or [[HashMap]]
} [[count]] _fnd; // returns 3</code> |= Example 3
 
|r1= [[Number]]
 
|s2= condition [[count]] array
 
|p21= condition: [[Code]] - condition that must return [[true]] for the tested element to be counted. The variable {{hl|[[Magic Variables#x|_x]]}} will contain the currently tested element
{{Feature|arma3|If the provided array contains different data types, use [[isEqualTo]] for item comparison instead of [[==]].}}
 
|p22= array: [[Array]]
 
|r2= [[Number]]
 
|x1= <sqf>
count [0, 0, 1, 2]; // returns 4
count units group player; // returns number of units in player group
</sqf>


|x4= <code>_alive = {
|x2= <sqf>
    [[alive]] [[Magic Variables|_x]];
private _cnt = { _x == 4 } count [1, 9, 8, 3, 4, 4, 4, 5, 6]; // returns 3
} [[count]] [[allUnits]]; // returns the number of living units</code>
_cnt = { alive _x } count allUnits; // returns the number of alive units
<br>
</sqf>
<code>_cnt = [[count]] ([[configFile]] [[gtgt|>>]] "CfgVehicles");</code> |= Example 4
__
____________________________________________________________________________________________
____________________________________________________________________________________________


| [[set]], [[resize]], [[pushBack]], [[reverse]], [[select]], [[in]], [[find]], [[toArray]], [[toString]], [[forEach]], [[in Array]] |= See also
|x3= <sqf>private _cnt = count (configFile >> "CfgVehicles");</sqf>


}}
|x4= <sqf>hint str count "japa is the man!"; // 16</sqf>


<h3 style="display:none">Notes</h3>
|x5= <sqf>hint format ["There are %1 elements in the provided hashmap", count _myHashMap];</sqf>
<dl class="command_description">
<!-- Note Section BEGIN -->
<dd class="notedate">Posted on April 28, 2007 - 13:49
<dt class="note">'''[[User:Kronzky|Kronzky]]'''<dd class="note">
This conditional count command ''only'' works if all the elements in the tested array are of the same [[Data Types|type]] as the tested element.<br>
For example, the following code will created an error, since the elements are of different types (object, number, string):
<code>_arr = [ [[player]],100,"one"]; {_x == "one"} [[count]] _arr;</code>
::Alternatively, to avoid the error use [[isEqualTo]] instead of ==. --KK<br>
This one, on the other hand, where all elements are strings, just like the tested element, will return the correct result of 1:
<code>_arr = ["one","two","three"]; {_x == "one"} [[count]] _arr;</code>


|seealso= [[apply]] [[select]] [[in]] [[find]] [[countFriendly]] [[countEnemy]] [[countUnknown]] [[countSide]] [[countType]] [[findIf]] [[forceUnicode]]
}}


<dd class="notedate">Posted on August 3, 2006 - 14:27
{{Note
<dt class="note">'''[[User:Hardrock|hardrock]]'''<dd class="note">''Notes from before the conversion:''
|user= Hardrock
|timestamp= 20060803142700
|text= ''Notes from before the conversion:''<br>
Use this to calculate how many "M16" mags a soldier has left.  
Use this to calculate how many "M16" mags a soldier has left.  
<code>{_x <nowiki>==</nowiki> "M16"} [[count]] [[magazines]] soldier1;</code>
<sqf>{ _x == "M16" } count magazines soldier1;</sqf>
Take care when using count to determine how many units are left alive in a group: count units [[group]] [[player]] or count units groupname Will return the number of units the leader of the group thinks are alive. If some units have been killed out of sight of other members of the group then it may take sometime for this to be the actual numbers in the group. To determine exactly how many units are really alive in a group use:  
Take care when using count to determine how many units are left alive in a group: count units [[group]] [[player]] or count units groupname Will return the number of units the leader of the group thinks are alive. If some units have been killed out of sight of other members of the group then it may take sometime for this to be the actual numbers in the group. To determine exactly how many units are really alive in a group use:  
<code>{[[alive]] _x} [[count]] [[units]] [[group]] [[player]];</code>
<sqf>{ alive _x } count units group player;</sqf>
or
or
<code>{[[alive]] _x} [[count]] [[units]] groupname;</code>
<sqf>{ alive _x } count units groupname;</sqf>
<!-- Note Section END -->
}}
</dl>


<h3 style="display:none">Bottom Section</h3>
{{Note
|user= Heeeere's Johnny!
|timestamp= 20141215000100
|text= ''count'' can be (ab)used for a very fast and simple check if at least one element in an array fulfills a certain condition:
<sqf>
if ({ if (/* _x fulfills condition */) exitWith {1}; false } count _array isEqualTo 1) then
{
// do whatever here
};
</sqf>
This code will exit the ''count'' loop as soon as it finds an element fulfilling the condition, leaving the ''count'' with the value of 1, hence make the larger if-condition be ''true''.<br>
If no array element fulfills the condition, the ''count'' will be 0 and the if-condition will be ''false''.
}}


{{Note
|user= Killzone_Kid
|timestamp= 20141229212300
|text= Quit loop at first fulfilled condition (same as above but faster):
<sqf>
{
if (_x == 4) exitWith {
// do something when we reach 4
}
} count [1,2,3,4,5,6];
</sqf>
}}
{{Note
|user= Heeeere's Johnny!
|timestamp= 20150102223200
|text= Using [[exitWith]] inside a '''count''' loop will overwrite the default functionality and make '''count''' return whatever the '''exitWith''' returns:
<sqf>
_result = {
if (_x isEqualTo 3) exitWith { "Hello" }
} count [1,2,3,4,5];
// _result = "Hello"
</sqf>
}}


[[Category:Scripting Commands|COUNT]]
{{Note
[[Category:Scripting Commands OFP 1.96|COUNT]]
|user= Ebay
[[Category:Scripting Commands OFP 1.46|COUNT]]
|timestamp= 20160822194100
[[Category:Scripting Commands ArmA|COUNT]]
|text= With the alternative syntax each iteration should result in an interior return of bool or nothing. Example:
[[Category:Command_Group:_Variables|{{uc:{{PAGENAME}}}}]]
<sqf>
[[Category:Scripting Commands ArmA2|{{uc:{{PAGENAME}}}}]]
createDialog "RscFunctionsViewer";
[[Category:Scripting Commands Arma 3|{{uc:{{PAGENAME}}}}]]
{ lbAdd [292901, _x]; } count ["first", "second", "third"];
[[Category:Scripting_Commands_Take_On_Helicopters|{{uc:{{PAGENAME}}}}]]
</sqf>
[[lbAdd]] returns a number, so this throws "Error Type Number, expected Bool". Tested in A2OA 1.63.131129
}}

Latest revision as of 19:43, 3 September 2024

Hover & click on the images for description

Description

Description:
Can be used to count:
  • The number of elements in an array (returns the already internally known array size)
  • The number of elements in an array matching the condition
  • The number of sub-entries in a config entry
  • Arma 3 logo black.png1.28 The number of characters in an ANSI string
    If Unicode support is desired, see forceUnicode.
Groups:
ArraysStringsConfigHashMap

Syntax

Syntax:
count value
Parameters:
value: Array, String, Config or HashMap
Return Value:
Number

Alternative Syntax

Syntax:
condition count array
Parameters:
condition: Code - condition that must return true for the tested element to be counted. The variable _x will contain the currently tested element
Arma 3
If the provided array contains different data types, use isEqualTo for item comparison instead of ==.
array: Array
Return Value:
Number

Examples

Example 1:
count [0, 0, 1, 2]; // returns 4 count units group player; // returns number of units in player group
Example 2:
private _cnt = { _x == 4 } count [1, 9, 8, 3, 4, 4, 4, 5, 6]; // returns 3 _cnt = { alive _x } count allUnits; // returns the number of alive units
Example 3:
private _cnt = count (configFile >> "CfgVehicles");
Example 4:
hint str count "japa is the man!"; // 16
Example 5:
hint format ["There are %1 elements in the provided hashmap", count _myHashMap];

Additional Information

See also:
apply select in find countFriendly countEnemy countUnknown countSide countType findIf forceUnicode

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
Hardrock - c
Posted on Aug 03, 2006 - 14:27 (UTC)
Notes from before the conversion:
Use this to calculate how many "M16" mags a soldier has left.
{ _x == "M16" } count magazines soldier1;
Take care when using count to determine how many units are left alive in a group: count units group player or count units groupname Will return the number of units the leader of the group thinks are alive. If some units have been killed out of sight of other members of the group then it may take sometime for this to be the actual numbers in the group. To determine exactly how many units are really alive in a group use: or
{ alive _x } count units groupname;
Heeeere's Johnny! - c
Posted on Dec 15, 2014 - 00:01 (UTC)
count can be (ab)used for a very fast and simple check if at least one element in an array fulfills a certain condition:
if ({ if (/* _x fulfills condition */) exitWith {1}; false } count _array isEqualTo 1) then { // do whatever here };
This code will exit the count loop as soon as it finds an element fulfilling the condition, leaving the count with the value of 1, hence make the larger if-condition be true.
If no array element fulfills the condition, the count will be 0 and the if-condition will be false.
Killzone_Kid - c
Posted on Dec 29, 2014 - 21:23 (UTC)
Quit loop at first fulfilled condition (same as above but faster):
{ if (_x == 4) exitWith { // do something when we reach 4 } } count [1,2,3,4,5,6];
Heeeere's Johnny! - c
Posted on Jan 02, 2015 - 22:32 (UTC)
Using exitWith inside a count loop will overwrite the default functionality and make count return whatever the exitWith returns:
_result = { if (_x isEqualTo 3) exitWith { "Hello" } } count [1,2,3,4,5]; // _result = "Hello"
Ebay - c
Posted on Aug 22, 2016 - 19:41 (UTC)
With the alternative syntax each iteration should result in an interior return of bool or nothing. Example:
createDialog "RscFunctionsViewer"; { lbAdd [292901, _x]; } count ["first", "second", "third"];
lbAdd returns a number, so this throws "Error Type Number, expected Bool". Tested in A2OA 1.63.131129