select: Difference between revisions
Jump to navigation
Jump to search
Killzone Kid (talk | contribs) (unicode) |
Lou Montana (talk | contribs) m (Add since template usage) |
||
Line 47: | Line 47: | ||
____________________________________________________________________________________________ | ____________________________________________________________________________________________ | ||
| s4= string '''select''' [start, length] | | s4= string '''select''' [start, length] {{since|arma3|1.27.126674|y}} |SYNTAX4= | ||
| p61= string: [[String]] |PARAMETER61= | | p61= string: [[String]] |PARAMETER61= | ||
Line 59: | Line 59: | ||
____________________________________________________________________________________________ | ____________________________________________________________________________________________ | ||
| s5= array '''select''' [start, count] | | s5= array '''select''' [start, count] {{since|arma3|1.31.127272|y}} |SYNTAX5= | ||
| p81= array: [[Array]] |PARAMETER81= | | p81= array: [[Array]] |PARAMETER81= | ||
Line 71: | Line 71: | ||
____________________________________________________________________________________________ | ____________________________________________________________________________________________ | ||
| s6= array '''select''' expression | | s6= array '''select''' expression {{since|arma3|1.55.133771|y}} |SYNTAX6= | ||
| p101= array: [[Array]] |PARAMETER101= | | p101= array: [[Array]] |PARAMETER101= | ||
Line 81: | Line 81: | ||
|x1= <code>[ | |x1= <code>["a", "b", "c", "d"] [[select]] 2; {{cc|result is "c"}} | ||
[[position]] [[player]] [[select]] 2; | [[position]] [[player]] [[select]] 2; {{cc|result is Z coordinate of player position}}</code>|EXAMPLE1= | ||
|x2= <code>["", [[currentWeapon]] [[player]]] [[select]] [[alive]] [[player]]; | |x2= <code>["", [[currentWeapon]] [[player]]] [[select]] [[alive]] [[player]]; {{cc|if player is dead, "" is selected}}</code> |EXAMPLE2= | ||
|x3= <code>([[configFile]] >> "cfgVehicles" >> [[typeOf]] [[vehicle]] [[player]] >> "Turrets") [[select]] 0 >> "gunnerAction";</code>|EXAMPLE3= | |x3= <code>([[configFile]] >> "cfgVehicles" >> [[typeOf]] [[vehicle]] [[player]] >> "Turrets") [[select]] 0 >> "gunnerAction";</code> |EXAMPLE3= | ||
|x4= <code>[[hint]] [[str]] ("japa is the man!" [[select]] [8]); {{cc|the man!}} | |||
[[hint]] [[str]] ("japa is the man!" [[select]] [0,7]); {{cc|japa is}}</code> |EXAMPLE4= | |||
| | |x5= <code>[[hint]] [[str]] ([1,2,3,4,5,6] [[select]] [1,4]); {{cc|[2,3,4,5]}}</code> |EXAMPLE5= | ||
[ | |||
|x6= <code>_even = [1,2,3,4,5,6,7,8,9,0] [[select]] { _x % 2 == 0 }; {{cc|returns [2, 4, 6, 8, 0]}}</code> |EXAMPLE6= | |||
|x6= <code>_even = [1,2,3,4,5,6,7,8,9,0] [[select]] {_x%2 == 0}; | |||
____________________________________________________________________________________________ | ____________________________________________________________________________________________ | ||
Line 103: | Line 102: | ||
<dl class="command_description"> | <dl class="command_description"> | ||
<!-- Note Section BEGIN --> | <!-- Note Section BEGIN --> | ||
<dd class="notedate">Posted on 3 March 2009 | <dd class="notedate">Posted on 3 March 2009</dd> | ||
<dt class="note">[[User:General Barron|General Barron]]<dd class="note"> | <dt class="note">[[User:General Barron|General Barron]]</dt> | ||
<dd class="note"> | |||
When combined with the [[count]] command, this can be used to read all entries out of a config; even when you don't know exactly how many entries there will be. See the notes under [[count]] for more info. | When combined with the [[count]] command, this can be used to read all entries out of a config; even when you don't know exactly how many entries there will be. See the notes under [[count]] for more info. | ||
<dd class="notedate">Posted on 27 Sep, 2013 | </dd> | ||
<dt class="note">[[User:Killzone_Kid|Killzone_Kid]]<dd class="note">Rounding of fractions with [[select]] is not the same as when you use [[round]] command: | |||
<dd class="notedate">Posted on 27 Sep, 2013</dd> | |||
<dt class="note">[[User:Killzone_Kid|Killzone_Kid]]</dt> | |||
<dd class="note">Rounding of fractions with [[select]] is not the same as when you use [[round]] command: | |||
<code>_roundThis = 0.5; | <code>_roundThis = 0.5; | ||
[[hint]] [[str]] ([0,1] [[select]] _roundThis); | [[hint]] [[str]] ([0,1] [[select]] _roundThis); {{cc|0}} | ||
[[hint]] [[str]] ([0,1] [[select]] [[round]] _roundThis); | [[hint]] [[str]] ([0,1] [[select]] [[round]] _roundThis); {{cc|1}}</code> | ||
<dd | </dd> | ||
<dd class="notedate">Posted on 14 juil, 2016 | <dd class="notedate">Posted on 14 juil, 2016 | ||
<dt class="note">[[User:Pierre MGI|Pierre MGI]]<dd class="note">You can substract array from array using select: | <dt class="note">[[User:Pierre MGI|Pierre MGI]]<dd class="note">You can substract array from array using select: | ||
Line 128: | Line 128: | ||
<h3 style="display:none">Bottom Section</h3> | <h3 style="display:none">Bottom Section</h3> | ||
[[Category:Scripting Commands| | [[Category:Scripting Commands OFP 1.46|{{uc:{{PAGENAME}}}}]] | ||
[[Category:Scripting Commands OFP 1.96|{{uc:{{PAGENAME}}}}]] | |||
[[Category:Scripting Commands OFP 1.99|{{uc:{{PAGENAME}}}}]] | [[Category:Scripting Commands OFP 1.99|{{uc:{{PAGENAME}}}}]] | ||
[[Category:Scripting Commands Armed Assault|{{uc:{{PAGENAME}}}}]] | |||
[[Category:Scripting Commands Armed Assault| | |||
[[Category:Scripting Commands Arma 2|{{uc:{{PAGENAME}}}}]] | [[Category:Scripting Commands Arma 2|{{uc:{{PAGENAME}}}}]] | ||
[[Category:Scripting Commands Arma 3|{{uc:{{PAGENAME}}}}]] | [[Category:Scripting Commands Arma 3|{{uc:{{PAGENAME}}}}]] | ||
Line 148: | Line 146: | ||
[1,2,3] [[select]] 4; //division by zero</code> | [1,2,3] [[select]] 4; //division by zero</code> | ||
</dd> | </dd> | ||
<dd class="notedate">Posted on November 12, 2016 - 22:36 (UTC)</dd> | <dd class="notedate">Posted on November 12, 2016 - 22:36 (UTC)</dd> | ||
<dt class="note">[[User:Commy2|Commy2]]</dt> | <dt class="note">[[User:Commy2|Commy2]]</dt> | ||
Line 167: | Line 161: | ||
</code> | </code> | ||
</dd> | </dd> | ||
<dd class="notedate">Posted on February 14, 2017 - 16:26 (UTC)</dd> | <dd class="notedate">Posted on February 14, 2017 - 16:26 (UTC)</dd> | ||
<dt class="note">[[User:Igneous01|Igneous01]]</dt> | <dt class="note">[[User:Igneous01|Igneous01]]</dt> | ||
<dd class="note"> | <dd class="note"> | ||
Syntax #5 is the equivalent of passing in a predicate that returns a boolean. In SQF, a piece of code will always return what the last executed command returned. | Syntax #5 is the equivalent of passing in a predicate that returns a boolean. In SQF, a piece of code will always return what the last executed command returned. | ||
<code> | <code>myAliveUnits = allunits select {alive _x;}; // alive returns a boolean, the last statement run was alive _x, therefore this piece of code will return a true/false to the select command | ||
myAliveUnits = allunits select {alive _x;}; // alive returns a boolean, the last statement run was alive _x, therefore this piece of code will return a true/false to the select command | |||
myEastGroups = allgroups select {side _x == EAST;}; // returns all groups that are side EAST | myEastGroups = allgroups select {side _x == EAST;}; // returns all groups that are side EAST | ||
my4ManGroups = allgroups select { count (units _x) == 4;}; // returns all groups that have 4 men in them | my4ManGroups = allgroups select { count (units _x) == 4;}; // returns all groups that have 4 men in them | ||
Line 183: | Line 172: | ||
</code> | </code> | ||
</dd> | </dd> | ||
<dd class="notedate">Posted on May 28, 2017 - 13:51 (UTC)</dd> | <dd class="notedate">Posted on May 28, 2017 - 13:51 (UTC)</dd> | ||
<dt class="note">[[User:IT07|IT07]]</dt> | <dt class="note">[[User:IT07|IT07]]</dt> | ||
Line 197: | Line 182: | ||
That is a great way of reporting about something without having to write a complicated it then else statement. | That is a great way of reporting about something without having to write a complicated it then else statement. | ||
</dd> | </dd> | ||
<dd class="notedate">Posted on April 14, 2018 - 13:06 (UTC)</dd> | <dd class="notedate">Posted on April 14, 2018 - 13:06 (UTC)</dd> | ||
<dt class="note">[[User:bloodwyn1756|bloodwyn1756]]</dt> | <dt class="note">[[User:bloodwyn1756|bloodwyn1756]]</dt> |
Revision as of 22:17, 23 December 2020
Description
- Description:
- Selects an element from an array, config entry from Config or substring from a string or a range from an array.
- Groups:
- ArraysStringsConfig
Syntax 1
- Syntax:
- array select index
- Parameters:
- array: Array
- index: Number - Index 0 denotes the first element, 1 the second, etc. If index has decimal places it gets rounded down for fractions less than or equal .5, otherwise it gets rounded up.
- Return Value:
- Anything - a reference to array element given by its index
Syntax 2
- Syntax:
- array select boolean
- Parameters:
- array: Array
- boolean: Boolean - true => 1, false => 0
- Return Value:
- Anything - a reference to array element given by its index (false - 0, true - 1)
Syntax 3
- Syntax:
- config select index
- Parameters:
- config: Config
- index: Number - Index 0 denotes the first element, 1 the second, etc. If index has decimal places it gets rounded down for fractions less than or equal .5, otherwise it gets rounded up.
- Return Value:
- Config
Syntax 4
- Syntax:
- string select [start, length] Template:since
- Parameters:
- string: String
- [start, length]: Array
- start: Number - String position to start selection from. 0 denotes the first character of the string, 1 the second, etc. If passed number has decimal places it gets rounded down for fractions less than or equal .5, otherwise it gets rounded up.
- length (optional): Number - Number of the string characters to select. If "length" is omitted, selection will be made from "start" to the end of the string.
- Return Value:
- String
Syntax 5
- Syntax:
- array select [start, count] Template:since
- Parameters:
- array: Array
- [start, count]: Array
- start: Number - Array index to start selection from.
- count: Number - Number of array elements to select. If the selected range exceeds source array boundaries, selection will be made up to the last element of the array.
- Return Value:
- Array - a new array from selection
Syntax 6
- Syntax:
- array select expression Template:since
- Parameters:
- array: Array
- expression: Code - expression that is expected to return Boolean or Nothing. If true is returned, the original array value of currently tested element _x will be added to the output array
- Return Value:
- Array - a new array of all elements from the original array that satisfied expression condition
Examples
- Example 1:
["a", "b", "c", "d"] select 2; // result is "c" position player select 2; // result is Z coordinate of player position
- Example 2:
["", currentWeapon player] select alive player; // if player is dead, "" is selected
- Example 3:
(configFile >> "cfgVehicles" >> typeOf vehicle player >> "Turrets") select 0 >> "gunnerAction";
- Example 4:
hint str ("japa is the man!" select [8]); // the man! hint str ("japa is the man!" select [0,7]); // japa is
- Example 5:
hint str ([1,2,3,4,5,6] select [1,4]); // [2,3,4,5]
- Example 6:
_even = [1,2,3,4,5,6,7,8,9,0] select { _x % 2 == 0 }; // returns [2, 4, 6, 8, 0]
Additional Information
- See also:
- a hash bselectRandomselectRandomWeightedsetresizereverseinfindfindIftoArraytoStringforEachcountdeleteAtdeleteRangeappendsortparamparamssplitStringjoinStringpushBackpushBackUniqueapplyforceUnicode
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
Notes
- Posted on 3 March 2009
- General Barron
- When combined with the count command, this can be used to read all entries out of a config; even when you don't know exactly how many entries there will be. See the notes under count for more info.
- Posted on 27 Sep, 2013
- Killzone_Kid
- Rounding of fractions with select is not the same as when you use round command:
_roundThis = 0.5; hint str ([0,1] select _roundThis); // 0 hint str ([0,1] select round _roundThis); // 1
- Posted on 14 juil, 2016
- Pierre MGI
- You can substract array from array using select:
_array = [[1],[2],[3]]; _sub = [2]; _array - _sub // [[1],[2],[3]; _array select {!(_x isEqualTo _sub)} // [[1],[3]]; [[1],[2],[2],[2],[2],[3]] select {!(_x isEqualTo _sub)} // [[1],[3]];
Bottom Section
- Posted on June 22, 2015 - 23:23 (UTC)
- Killzone Kid
-
Usually when select tries to pick up element out of range, Arma throws "division by zero" error. However there are exceptions. Basically as long as index of element you are selecting is less then or equal to array size, you will get no error.
[] select 0; //ok, result is nil [1,2,3] select 3; //ok, result is nil [1,2,3] select 4; //division by zero
- Posted on November 12, 2016 - 22:36 (UTC)
- Commy2
-
It is not safe to escape the code block of alternative syntax #5 with exitWith, breakOut etc.
x3 = [1,2,3,4,5] select { if (_x == 3) exitWith { false; }; true }; // could be expected to be: x3 = [1,2,4,5] // actual result: x3 = false
- Posted on February 14, 2017 - 16:26 (UTC)
- Igneous01
-
Syntax #5 is the equivalent of passing in a predicate that returns a boolean. In SQF, a piece of code will always return what the last executed command returned.
myAliveUnits = allunits select {alive _x;}; // alive returns a boolean, the last statement run was alive _x, therefore this piece of code will return a true/false to the select command myEastGroups = allgroups select {side _x == EAST;}; // returns all groups that are side EAST my4ManGroups = allgroups select { count (units _x) == 4;}; // returns all groups that have 4 men in them UnitsThatDetectedMe = allunits select {_x knowsAbout player > 0.1;}; // returns a list of units that have detected the player
- Posted on May 28, 2017 - 13:51 (UTC)
- IT07
-
Very simple example of how to report about the status of the player:
[ "Player is dead.", "Player is alive" ] select ( alive player )
returns "Player is alive" because ( alive player ) returned true. If ( alive player ) returned false, the first element (0) would have been returned. That is a great way of reporting about something without having to write a complicated it then else statement. - Posted on April 14, 2018 - 13:06 (UTC)
- bloodwyn1756
- Since 1.82 "#" symbol can be used to select from an array. It's shorter to write and has higher priority than math functions.
Categories:
- Scripting Commands
- Introduced with Operation Flashpoint version 1.00
- Operation Flashpoint: New Scripting Commands
- Operation Flashpoint: Scripting Commands
- Command Group: Arrays
- Command Group: Strings
- Command Group: Config
- Scripting Commands OFP 1.46
- Scripting Commands OFP 1.96
- Scripting Commands OFP 1.99
- Scripting Commands Armed Assault
- Scripting Commands Arma 2
- Scripting Commands Arma 3
- Scripting Commands Take On Helicopters