Skip to content

Commit b5246cd

Browse files
committed
merge on ComponentVectors
1 parent 59031c1 commit b5246cd

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

src/ComponentArrays.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ module ComponentArrays
22

33
import ChainRulesCore
44
import StaticArrayInterface, ArrayInterface, Functors
5+
import Base.merge
56

67
using LinearAlgebra
78

@@ -22,7 +23,7 @@ include("axis.jl")
2223
export AbstractAxis, Axis, PartitionedAxis, ShapedAxis, ViewAxis, FlatAxis
2324

2425
include("componentarray.jl")
25-
export ComponentArray, ComponentVector, ComponentMatrix, getaxes, getdata, valkeys
26+
export ComponentArray, ComponentVector, ComponentMatrix, getaxes, getdata, valkeys, merge
2627

2728
include("componentindex.jl")
2829
export KeepIndex

src/componentarray.jl

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,3 +336,15 @@ julia> sum(prod(ca[k]) for k in valkeys(ca))
336336
return :($k)
337337
end
338338
valkeys(ca::ComponentVector) = valkeys(getaxes(ca)[1])
339+
340+
function merge(cvec1::ComponentVector{T1}, cvec2::ComponentVector{T2}) where {T1, T2}
341+
typed_dict = ComponentVector{promote_type(T1, T2)}(cvec1)
342+
for key in valkeys(cvec2)
343+
keyname = getval(key)
344+
val = cvec2[key]
345+
typed_dict = eval(:( ComponentArray($typed_dict, $keyname = $val) ))
346+
end
347+
typed_dict
348+
end
349+
350+
merge(a::ComponentVector, b::ComponentVector, cs::ComponentVector) = merge(merge(a,b), cs...)

0 commit comments

Comments
 (0)