通过数组元素的变化使int数组变化的总和

时间:2019-04-11 04:42:36

标签: arrays pointers julia

我有以下几种数组的集合:

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 个答案:

答案 0 :(得分:1)

您可以使用MappedArraysMappedArrays提供数组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