Сделать сумму изменения массива int с изменениями в элементах массива - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть коллекция массивов следующим образом:

arr = Array{Array{Int64,1},1}( [ [1,2,3] , [4,5,6] , [7,8,9] ] )

Я хочу определить новый массив sum такой, что sums[i] = sum(arr[i]) но динамически, так что если я изменяю элемент arr[i], sums[i] изменяется автоматически. Например:

julia> sums
3-element Array{Int64,1}:
  6
 15
 24

julia> arr[1][1] = 3
3

julia> sums
3-element Array{Int64,1}:
  8
 15
 24

Возможно ли это сделать? Если да, то как я могу это сделать?

1 Ответ

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

Вы можете использовать MappedArrays. MappedArrays обеспечивает "просмотр" M массива A, так что M[i] = f(A[i]). Все, что вам нужно сделать, это добавить пакет MappedArrays к ]add MappedArrays и начать использовать его с функцией sum. Обратите внимание, что преобразование является ленивым, что означает, что он будет вычислять значения в M при попытке доступа к ним. Поэтому после обновления до A вы увидите изменение в M при доступе к записям M.

julia> using MappedArrays

julia> arr = [ [1,2,3] , [4,5,6] , [7,8,9] ] 
3-element Array{Array{Int64,1},1}:
 [1, 2, 3]
 [4, 5, 6]
 [7, 8, 9]

julia> M = mappedarray(sum, arr)
3-element mappedarray(sum, ::Array{Array{Int64,1},1}) with eltype Int64:
  6
 15
 24

julia> arr[1][2] = 10
10

julia> M
3-element mappedarray(sum, ::Array{Array{Int64,1},1}) with eltype Int64:
 14
 15
 24
...