0

我有以下“地图”变量:

permutation[100]=-2;
permutation[3]=-1;
permutation[19]=0;
permutation[-20]=1;

有没有办法枚举所有的值?我不在乎枚举顺序。我的意思是这样的(不工作的代码):

Do[i+=3,{i,permutation}]

我告诉他们受 C++ 启发的“映射”变量。他们的正确名称是什么,以找到更好的搜索结果?

4

2 回答 2

2

这是“元数学”变量或函数的定义存储在内部,可以使用 DownValues[] 提取,因此,如果您想要定义排列的“输入值”集,请使用

Cases[DownValues[permutation], permutation[x_] :> x, \[Infinity]]

结果是

{-20, 3, 19, 100}

耶胡达

于 2013-04-13T18:42:01.103 回答
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]}]

首先可能有更好的方法来定义您的数据..

这是一个有时有用的技巧(虽然只适用于正参数)

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]}
于 2013-04-11T20:45:43.747 回答