在使用Mathematica的符号和数字功能之后,我发现它也是一种不错的编程语言。但是,作为通用语言使其不那么吸引人的东西是缺少类似C的结构数据类型(或Pascal中已知的记录类型)。我怎样才能解决这个问题呢?
答案 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]
将返回7
,x[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
有关详细信息,请参阅
Association
DataSet
(建立于Association
)答案 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}}