首页 > 解决方案 > 使 int 数组的总和随着数组元素的变化而变化

问题描述

我有以下方式的数组集合:

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

我想定义一个新的数组sumsums[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

这可能吗?如果是这样,我该怎么做?

标签: arrayspointersjulia

解决方案


您可以使用MappedArrays. 提供数组MappedArrays的“视图” ,以便. 所有你需要做的就是添加包并开始使用它。请注意,转换是惰性的,这意味着它会在您尝试访问它们时计算值。因此,更新到 后,您将在访问 的条目时看到更改。MAM[i] = f(A[i])MappedArrays]add MappedArrayssumMAMM

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

推荐阅读