Как обменять одно конкретное значение в массиве у Юлии? - PullRequest
1 голос
/ 25 октября 2019

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

Вот как это будет работать в Java, но я не могу найти решение для Джулии. Должен ли я сначала скопировать массив? Я довольно невежественен.

function sorted_exchange(v::Array{Int64,1}, in::Int64, out::Int64)
    i=1
    while v[i]!=out
        i+=1
    end
    v[i]=in
    return v
end

Программа запускается, но просто возвращает "старый" вектор. Пример: sorted_exchange([1,2,3],4,3), ожидаемый: [1,2,4], фактический: [1,2,3]

Ответы [ 2 ]

4 голосов
/ 25 октября 2019

Для этого есть хорошая встроенная функция: replace или его версия на месте: replace!:

julia> v = [1,2,3];

julia> replace!(v, 3=>4);

julia> v
3-element Array{Int64,1}:
 1
 2
 4

Код, который вы разместили, кажется, работает нормально, хотя он и что-то делаетнемного отличается. Ваш код заменяет только первый экземпляр 3, а replace! заменяет каждый экземпляр. Если вы просто хотите заменить первый экземпляр, вы можете написать:

julia> v = [1,2,3,5,3,5];

julia> replace!(v, 3=>4; count=1)
6-element Array{Int64,1}:
 1
 2
 4
 5
 3
 5
3 голосов
/ 25 октября 2019

Вы можете найти значение, которое хотите заменить, используя findall:

a = [1, 2, 5]
findall(isequal(5), a) # returns 3, the index of the 5 in a

и использовать его для замены значения

a[findall(isequal(5), a)] .= 6
a # returns [1, 2, 6]
...