复制元组并修改

Ric*_*ard 5 julia

我有一个元组:

my_tup=(a=1,b=2,c=3,d=4,e=5,f=6,g=7,h=8,i=9)
Run Code Online (Sandbox Code Playgroud)

我想修改这个元组中的一个值。因为元组是不可变的,所以明显的路线不起作用:

my_tup[:a]=50 #Raises an error, as expected
Run Code Online (Sandbox Code Playgroud)

因此,要执行修改,我想在更改目标元素的同时复制元组及其元素。

我目前的解决方案如下:

my_tup=(a=1,b=2,c=3,d=4,e=5,f=6,g=7,h=8,i=9)
args = keys(my_tup)
NamedTuple{args}(i!=:a ? getfield(my_tup, i) : 50 for i in args)
Run Code Online (Sandbox Code Playgroud)

但这似乎很冗长,或者好像标准库中应该已经有一个函数了。

有没有更好的办法?

Dav*_*ela 4

您可以使用merge两个命名元组:

julia> xs = (a = 1, b = 2, c = 3)
(a = 1, b = 2, c = 3)

julia> ys = merge(xs, (; a = 50))
(a = 50, b = 2, c = 3)
Run Code Online (Sandbox Code Playgroud)