Это то, что вы хотите? В примере я предполагаю, что ваш y1 — это 1.
julia> A = [5, 4, 3, 1, 2, 7, 8]
7-element Vector{Int64}:
5
4
3
1
2
7
8
julia> loc = findfirst(==(1), A)
4
julia> isnothing(A) || (A[loc:end] .= 1);
julia> A
7-element Vector{Int64}:
5
4
3
1
1
1
1
Если findfirst('s', "first") == 4, то почему у нас не может быть findfirst(1,A)==4? Это кажется естественным. Была ли какая-то причина, по которой этот особый случай не был реализован?
let found = false ; [ found || x==1 ? ( found = true ; 1 ) : x for x in A] end
тоже работает (просто добавляет разнообразия)
Вы можете добавить это в ответ? @DanGetz
@DanGetz, потому что для поиска в строках существует фиксированный набор вещей, которые вы можете искать. Если вы напишете findfirst(x, A) в общем случае, будет двусмысленно, если x является значением, которое вы ищете, или функцией предиката, которую нужно применить.
Если вы просто хотите исправить свой собственный код вместо другого подхода:
for i in eachindex(A)
if A[i]==y1
for j in i+1:lastindex(A)
A[j]=y1
end
break # this is important
end
end
Оператор break выходит из текущего цикла. Он также должен быть очень эффективным. Я также заменил length(A) на lastindex(A), чтобы сделать его более общим, поскольку вы уже используете eachindex.
Это будет быстро. Возможно, внутренний цикл можно заменить на @views fill!(A[i+1:lastindex(A)], y1)
@DanGetz, есть ли какая-то конкретная причина не использовать end вместо lastindex(A)?
@fandak end должно быть в порядке (просто скопировал из ответа).
Как это воспроизводимо?