Mathematica中的结构数据类型?

时间:2009-09-21 05:27:25

标签: struct types wolfram-mathematica

在使用Mathematica的符号和数字功能之后,我发现它也是一种不错的编程语言。但是,作为通用语言使其不那么吸引人的东西是缺少类似C的结构数据类型(或Pascal中已知的记录类型)。我怎样才能解决这个问题呢?

4 个答案:

答案 0 :(得分:15)

更新:Mathematica 10引入了Association,它具有struct的许多最重要的属性。 (参见new answer。)这个答案的原始的,有点弃用的版本如下。


您可以使用 Mathematica 规则列表来模仿类似C的struct数据类型。 。E.g,:

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

然后,您可以使用/.运算符访问记录的字段:

firstName /. person

收益John

lastName /. person

收益Doe

要更新记录的字段,请将更新的字段添加到列表中:

PrependTo[person , firstName -> "Jane"]

firstName /. person然后产生Jane

另请参阅transformation rules上的 Mathematica 文档。

答案 1 :(得分:8)

如果我理解你的问题,你可以简单地写下这样的事情:

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

然后要访问任何特定索引的数据,只需键入相同的内容(例如,x[1]将返回7x[foo]将返回bar)。

答案 2 :(得分:3)

Mathematica 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

有关详细信息,请参阅

答案 3 :(得分:2)

这种方式可行:

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}}