2013-04-11 92 views
0

我有以下的“地图”变量:枚举“地图”可变

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

有没有办法来枚举所有的值? 我不关心枚举顺序。 我的意思是这样(不工作密码):

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

我告诉他们,“地图”由C灵感变量++。什么是他们的正确名称,以找到更好的搜索结果?

+0

置换[100] = -2; 置换[3] = -1; 置换[19] = 0; 置换[-20] = 1; DownValues [置换] – 2013-04-12 00:08:38

回答

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

有可能以更好的方法首先定义你的数据..

这里是一个有时候很有用的技巧(只适用于正确的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]} 
+0

oops,只是注意到你想改变循环中的值。以上所有可以做一些调整.. – agentp 2013-04-11 21:21:20

2

这是“元数学” 定义一个变量或函数内部存储并且可以使用DownValues [] 来提取,因此,如果您想要为其定义置换的“输入值”集合,请使用

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

{-20, 3, 19, 100} 

胡达所得