Robustcolor 30 Posted January 19, 2020 Hi, what is your opinion about using findif vs count in context like these below. When is findif better to use vs the count command? waitUntil {uiSleep 300; ({_x distance2d _veh < 1000} count allPlayers == 0)}; vs waitUntil {uiSleep 300; allPlayers findIf {(_x distance2d _veh) < 1000} ==-1}; Here count seems to be slightly faster. waitUntil {uiSleep 5; (allPlayers findIf {(_x distance2d _marker) > 450} !=-1)}; vs waitUntil {uiSleep 5; ({_x distance2d _marker < 450} count allPlayers == 0)}; Here findIf seems slighlty faster. while {{alive _x} count (units _group) > 0} do {}; vs while {units _group findIf {alive _x} >-1} do {}; count slighlty faster. Share this post Link to post Share on other sites
Grumpy Old Man 3540 Posted January 19, 2020 Use commands for their intended purpose. findIf when you need to find the first array element matching the criteria, count if you need to find how many elements are matching the criteria. Performance should be a concern if you actually run into performance issues (and I'm sure those will not be solved by switching from count to findIf or vice versa). Cheers 3 Share this post Link to post Share on other sites
Robustcolor 30 Posted January 19, 2020 Thanks @Grumpy Old Man The thing is i read here https://community.bistudio.com/wiki/Code_Optimisation that findIf could be slighlty faster then count depending on how you use it. _someoneIsNear = (allUnits findIf { _x distance [0,0,0] < 1000 }) != -1; // 0.0275 ms _someoneIsNear = { _x distance [0,0,0] < 1000 } count allUnits > 0; // 0.0645 ms Share this post Link to post Share on other sites
pierremgi 4738 Posted January 19, 2020 Not an opinion but you can analyse: what's difference between allUnits and allPlayers during your test? I guess allPlayers was a single unit array, so not really significant for such test. and, cherry on the cake, you're running the code every 5 or even 300 seconds... We are far from an on each framed code. Share this post Link to post Share on other sites
haleks 8206 Posted January 19, 2020 4 hours ago, Robustcolor said: Thanks @Grumpy Old Man The thing is i read here https://community.bistudio.com/wiki/Code_Optimisation that findIf could be slighlty faster then count depending on how you use it. _someoneIsNear = (allUnits findIf { _x distance [0,0,0] < 1000 }) != -1; // 0.0275 ms _someoneIsNear = { _x distance [0,0,0] < 1000 } count allUnits > 0; // 0.0645 ms Like Grumpy said, the most important thing is why you use it. FindIf stops the evaluation as soon as a matching result is found, whereas count evaluates all elements in an array. On small arrays it won't make a big difference, and not in a reliable way; but if you don't need to actually iterate through all elements, stick with findIf. One thing to keep in mind : the more elements matching the evaluated criteria, the more you have to gain by using findIf. It can be fast too if used to "find a needle in a haystack", but you're basically relying on luck in such a scenario (and hoping the match doesn't happen to be the last element in your array). 3 Share this post Link to post Share on other sites