我有以下“地图”变量:
permutation[100]=-2;
permutation[3]=-1;
permutation[19]=0;
permutation[-20]=1;
有没有办法枚举所有值? 我不关心枚举顺序。 我的意思是这样的(不是工作代码):
Do[i+=3,{i,permutation}]
我告诉他们来自C ++的“地图”变量。为了找到更好的搜索结果,他们的正确名称是什么?
答案 0 :(得分:2)
这是“Meta Mathematica” 变量或函数的定义在内部存储,可以使用DownValues []提取 所以,如果你想要定义排列的“输入值”集合,使用
Cases[DownValues[permutation], permutation[x_] :> x, \[Infinity]]
结果
{-20, 3, 19, 100}
胡达
答案 1 :(得分:1)
你所做的基本上是定义离散值的函数。如果您维护一个值列表,则可以执行此操作:
permutation[100] = -2;
permutation[3] = -1;
permutation[19] = 0;
permutation[-20] = 1;
vals = {100, 3, 19, -20}
像这样使用:
f /@ permutation /@ vals -> {f[-2], f[-1], f[0], f[1]}
或循环..
Do[ Print[permutation[vals[[i]]]], {i, Length[vals]}]
首先可能有更好的方法来定义数据..
这是一个有时有用的技巧(虽然只对posative args有用)
permutation = SparseArray[{}, {200}, Null]
permutation[[100]] = -2;
permutation[[3]] = -1;
permutation[[19]] = 0;
f /@ Select[ permutation, ! (TrueQ[# == Null]) &]
out: {f[-1], f[0], f[-2]}
最简单的方法就是将排列设为一个列表:
permutation={}
AppendTo[permutation,{100,2}]
AppendTo[permutation,{3,-1}]
然后做
f[#[[2]]]& /@ permutation -> {f[2],f[-1]}