если у меня есть следующий пример функции
function isBigger(element)
if element > 3
println("element bigger than three")
end
end
и я называю это a=[1 5 7 2]
с isBigger.(a)
.
Я получил:
>bigger than three
>bigger than three
Что я могу сделать, чтобы получить индексы элементов? я хотел бы получить
>Element at index 2 is bigger than three
>Element at index 3 is bigger than three
Также должна быть возможность вызывать функцию для одного значения, например isBigger(4)
:
isBigger(4)
>bigger than three
Когда вы транслируете, isBigger
получает только элемент, а не его индекс. Вот и все.
Логика функции немного отличается, я бы создал две функции, одну для элементов массива в качестве аргумента и одну для скаляров.
вы можете использовать функцию findall
julia> a=[1,5,7,2];
julia> findall(x->x>3, a)
2-element Vector{Int64}:
2
3
Вы также можете комбинировать это с вашей функцией
function isBigger(element)
if element > 3
println("element bigger than three")
return true
else
return false
end
end
findall(isBigger, a)
Это нетипичная работа для вещания, потому что вы хотите отслеживать индексы. Так что нормальный цикл по элементам здесь правильный выбор. Теперь, поскольку ваша функция имеет две разные логики, как указал @Antonello, вам лучше использовать механизм множественной отправки Джулии. Создайте небольшую функцию для скаляров и более ограниченную функцию для массивов.
isBigger(n) = n > 3 && println("Bigger than 3")
isBigger(a::AbstractArray) = begin
for i in eachindex(a)
a[i] > 3 && println("Element at $i is bigger than 3")
end
end
Который работает следующим образом:
a = [1, 5, 7, 2]
isBigger(a)
Element at 2 is bigger than 3
Element at 3 is bigger than 3
isBigger(4)
Bigger than 3
«Также должна быть возможность вызвать функцию для одного значения» - каким будет результат?
Element at index ??? is bigger than three
?