与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]
将返回7
, x[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?