Минимальное значение, которое не ноль - PullRequest
1 голос
/ 24 апреля 2019

В Applescript мне нужно найти целочисленное значение, близкое к нулю, но не к нулю.Числа все ноль или больше нуля.В настоящее время у меня есть три целых числа.

Наверное, я мог бы написать цикл, но есть ли более простой способ?

примеры:

{0,3,4} find 3. 
{1,0,0} find 1
{4,10,2} find 2
{0,0,0} find nothing or 0

1 Ответ

1 голос
/ 25 апреля 2019

Вам нужно написать цикл, потому что в какой-то момент каждый элемент в списке должен быть оценен, так что от этого не обойтись (при условии итеративного метода; вы, конечно, могли бы написать рекурсивный алгоритм, который не 'не содержит явного цикла - я проиллюстрирую оба ниже).

1.Итерация

Итерационный метод отслеживает наименьшее ненулевое число, встречающееся, когда мы работаем, один за другим, через каждое число в списке.Когда мы достигаем конца списка, отслеживаемое значение будет результатом, к которому мы стремимся:

on minimumPositiveNumber from L
    local L

    if L = {} then return null

    set |ξ| to 0

    repeat with x in L
        set x to x's contents
        if (x < |ξ| and x ≠ 0) ¬
            or |ξ| = 0 then ¬
            set |ξ| to x
    end repeat

    |ξ|
end minimumPositiveNumber

get the minimumPositiveNumber from {10, 2, 0, 2, 4} --> 2

2.Рекурсия

Рекурсивный метод сравнивает первый элемент в списке с самым низким ненулевым значением в остальной части списка, сохраняя самое низкое ненулевое значение:

on minimumPositiveNumber from L
    local L

    if L = {} then return 0

    set x to the first item of L
    set y to minimumPositiveNumber from the rest of L

    if (y < x and y ≠ 0) or x = 0 then return y

    x
end minimumPositiveNumber

get the minimumPositiveNumber from {10, 2, 0, 2, 4} --> 2
...