From 0e253ecb8399173d7fde937f960d6662704323ed Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Sat, 28 Dec 2024 18:52:33 +0800 Subject: [PATCH] opt: findClosestNumber Signed-off-by: bggRGjQaUbCoE --- lib/utils/utils.dart | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index 2f47f9fc..9983b110 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -750,24 +750,19 @@ class Utils { } static int findClosestNumber(int target, List numbers) { - int minDiff = 127; - int? closestNumber; - try { - for (int number in numbers) { - int diff = target - number; - if (diff < 0) { - continue; - } - if (diff < minDiff) { - minDiff = diff; - closestNumber = number; - } - } - } catch (_) { - } finally { - closestNumber ??= numbers.last; - } - return closestNumber; + return switch (numbers.length) { + 0 => target, + 1 => numbers.first, + _ => numbers.reduce((a, b) { + int diff1 = (a - target).abs(); + int diff2 = (b - target).abs(); + return diff1 == diff2 + ? max(a, b) + : diff1 < diff2 + ? a + : b; + }), + }; } // 版本对比