在数学结构数据类型?(Struct data type in Mathematica?)

2019-07-18 18:03发布

与Mathematica的符号和数字的能力打后,我发现这是一个体面的编程语言了。 然而,一件事情,作为一个通用的语言,它不太吸引人的是缺乏类似C的结构数据类型(或帕斯卡已知的记录类型)。 我怎样才能解决这个问题呢?

Answer 1:

更新 :数学10推出了Association ,其中有许多的最重要的属性struct 。 (见新的答案 。)这个答案原来,有些过时的版本如下。


您可以使用一个数学规则列表模仿类似C的结构数据类型。 例如,:

person = {firstName -> "John", lastName -> "Doe"}

然后,您可以通过访问记录的字段/. 运营商:

firstName /. person

得到John

lastName /. person

得到Doe

要更新记录的字段,在前面加上更新的字段列表:

PrependTo[person , firstName -> "Jane"]

firstName /. person firstName /. person则产生Jane

还看到在数学文档转换规则 。



Answer 2:

如果我没有理解你的问题,你可以简单地这样写:

x[foo] = bar
x[bar] = baz
x[1] = 7
x[7] = 1
?x

然后访问数据的任何特定指标只是键入相同的(例如, x[1]将返回7x[foo]将返回bar )。



Answer 3:

数学10日前推出Association ,其中有许多的最重要的属性struct

someData = <| "name" -> "Bob", "age" -> 23 |>

In[1]:= someData["name"]
Out[1]= Bob

In[2]:= someData["age"]
Out[2]= 23

In[3]:= someData[[2]]
Out[3]= 23

欲了解更多信息,请参阅

  • Association
  • DataSet (它建立在Association
  • 沃尔弗拉姆指导: 浅谈数据集和程序员快速入门 。
  • Mathematica.SE问题: 如何利用协会和结构相当于数学?
  • 这HackerNews评论 。


Answer 4:

这种方式可以工作:

x[foo] = bar

x[bar] = baz

x[1] = 7

x[7] = 1

x[c] = {{1,2,3},{4,5,6}}

也改变可以使下面的列表字段的内容:

x[c] = ReplacePart[x[c], {1, 1} -> 8]

返回:

x[c] = {{8,2,3},{4,5,6}}


文章来源: Struct data type in Mathematica?