微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Mathematica 中通过引用传递列表元素

如何解决在 Mathematica 中通过引用传递列表元素

我正在使用这个我称之为“associationList”的数据结构,它具有以下格式:

<| key1->{value1,value2,...},key2->{value1,...|>

我想让函数 Add[assocList_,key_,value_] 通过引用将 key->{value} 添加到 associationList。我有以下代码

Add[assoc_,elt_] :=
  If[Head@assoc[key] === Missing,AppendTo[assoc,key -> {elt}],AppendTo[assoc[key],elt]];
SetAttributes[AddToAssocList,HoldFirst];

Add 函数适用于此示例:

y=<||>;
Add[y,1,a];
(* y is <|1->{a}|> *)
Add[y,b];
(* y is <|1->{a,b}|> *)

但是当我将示例更改为以下内容时,出现错误

y={<||>};
Add[y[[1]],a];
(* y is <|1->{a}|> *)
Add[y[[1]],b];
(* Error - Association - "<|1->{a}|> in the part assignment is not a symbol" *)

使用任何类型的保持似乎都无济于事。有什么想法吗?

解决方法

答案是将 Add 中的 assoc[key] 更改为 assoc[[ Key[key] ]]。这是有效的,因为 assoc[key] 给出了一个关联,而 assoc[[ Key[key] ]] 给出了对关联的引用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。