-
Notifications
You must be signed in to change notification settings - Fork 0
/
fnc_filter.sqf
32 lines (32 loc) · 1.26 KB
/
fnc_filter.sqf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/////////////////////////////// fnc_filter ///////////////////////// 2016-10-21
/* Filter an array by application of a predicate */
/////////////////////////////////////////////////////
private [ //
"_fn", // Function [IN/A0/B0] //
"_arr", // Array [IN/A1/B1] ////
"_extra_vars", // Array [IN/A2] //////
"_acc", // Array [OUT] /// ///
"_elt" // Element /// ///
// /// ///
]; /////////////////////////////////////// <dwringer@gmail.com> /// ///
_fn = _this select 0;
_arr = _this select 1;
if ((count _this) == 3) then {
_extra_vars = _this select 2;
} else {
_extra_vars = [];
};
_acc = [];
for "_i" from 0 to ((count _arr) - 1) do {
_elt = _arr select _i;
if (not isNil "_elt") then {
if (([_elt] + _extra_vars) call _fn) then {
_acc = _acc + [_elt];
};
} else {
if (([nil] + _extra_vars) call _fn) then {
_acc = _acc + [_elt];
};
};
};
_acc; // RETURN //////////////////////////////////////////////////////////////